Yeap, that pretty much says it all. Previously I had played with scons which is in my opinion pretty good but somehow cmake is even simpler.
The main reason for switching to cmake is the fact that starting from some specification files I can generate project files for:
- make (for various toolchains)
- eclipse projects - I use Eclipse
- codeblocks
- kdevelop
- visual studio
- and probably others
Can you beat this?
And don't tell me that GNU Build System is easy to use because you gotta be kidding, or you never used something decent, which mostly means anything but GNU Build System.
Showing posts with label IT. Show all posts
Showing posts with label IT. Show all posts
Sunday, June 24, 2012
Saturday, June 23, 2012
Development: Why Eclipse *is* the IDE
Probably many of you have seen question like this one: What IDE to use for GNU/Linux?
Many of the answers are from people who are really far away from what developers need. Some of the people simply suggest vi/emacs, gcc/g++, gdb, make and friends. Nothing wrong with that but can you handle a *project*?
And by handling project I mean you can:
- debug in a reasonable amount of time (also in large projects)
- be able to find fast in the code: definition, cross-referencing, call graph, etc
- refactor code fast and easy
- to be able to go from a message window directly to referenced file/line in the code
- to be able to integrate easily with multiple libraries or projects
An editor and a compiler/debugger is good enough to write some programs like the entire command line utilities (cd, ls, which, grep, sed ... ), but I'm pretty sure that for large projects you will end up using an IDE, or you will struggle with those tools (vi/emacs+gcc+gdb) just to prove that it might be possible.
Why do I think will you struggle?
Because for a large project things quickly start to get out of control:
- many (source) files
- the need to refactor some huge parts of code when you found out that something doesn't fit
- inefficiency when it comes to check for errors (working on huge code with command line tools is not an easy job)
Try imagining you need to copy some code from one file and moving into another file, or rename a function in all the places where the function is called (imagine there is a function with that name already... ). Can you do that with "sed" and friends. No! Or yes, after you've built yourself a language interpreter that makes the difference between function A from class X and function A (that will become A1) from class Y.
Let's face it, it is not an easy job, not even for an experienced programmer.
So use an IDE at least as good as Eclipse.
My reasons to use Eclipse:
- it ready to use with many languages via some plugins (c++, python, java ...)
- it has nice features like refactoring
- it is not slow as some people say. Just because it is Java doesn't means it is slow... things have evolved since Java version 1.2 you know?
- it supports different types of code style that you can use. You can format all your code to use a certain code style.
- has code completion
- has very good code searching
- has an internal language interpreter that helps you with errors before starting to compile
- it works on many platforms
- ... many others
- and yes, IT WORKS
I know that there are many tools that cumulated do just that (cscope, ctags, vi with some "nice" .vimrc, gdb, sed, grep, awk ) but I don't have the time and the patience to INTEGRATE them. I somehow know how to use each tool and I will use it if needed but hey, I need to be PRODUCTIVE. Using a tool is not cool for me, and certainly it is not my purpose. My purpose is to get the job done. If I know some command line shortcuts I will use them, I won't rely only on the IDE if I smell that the job can be done faster in a different way.
This is where I think there's a problem with the command line folks. They don't want to start some IDE because it is "heavyweight", "bloated" and that IDE simply wraps around some command line tools and hide everything for you. But that's the fucking purpose, to hide some complexity so you can focus on the job and not on the tool. For simple tasks you might make it with command line and an editor, but for larger projects you will fuck up fast, or die in anger.
So don't use a tool to be cool!
Use it to get the job done! No matter the tool is an IDE or some obscure perl script.
Many of the answers are from people who are really far away from what developers need. Some of the people simply suggest vi/emacs, gcc/g++, gdb, make and friends. Nothing wrong with that but can you handle a *project*?
And by handling project I mean you can:
- debug in a reasonable amount of time (also in large projects)
- be able to find fast in the code: definition, cross-referencing, call graph, etc
- refactor code fast and easy
- to be able to go from a message window directly to referenced file/line in the code
- to be able to integrate easily with multiple libraries or projects
An editor and a compiler/debugger is good enough to write some programs like the entire command line utilities (cd, ls, which, grep, sed ... ), but I'm pretty sure that for large projects you will end up using an IDE, or you will struggle with those tools (vi/emacs+gcc+gdb) just to prove that it might be possible.
Why do I think will you struggle?
Because for a large project things quickly start to get out of control:
- many (source) files
- the need to refactor some huge parts of code when you found out that something doesn't fit
- inefficiency when it comes to check for errors (working on huge code with command line tools is not an easy job)
Try imagining you need to copy some code from one file and moving into another file, or rename a function in all the places where the function is called (imagine there is a function with that name already... ). Can you do that with "sed" and friends. No! Or yes, after you've built yourself a language interpreter that makes the difference between function A from class X and function A (that will become A1) from class Y.
Let's face it, it is not an easy job, not even for an experienced programmer.
So use an IDE at least as good as Eclipse.
My reasons to use Eclipse:
- it ready to use with many languages via some plugins (c++, python, java ...)
- it has nice features like refactoring
- it is not slow as some people say. Just because it is Java doesn't means it is slow... things have evolved since Java version 1.2 you know?
- it supports different types of code style that you can use. You can format all your code to use a certain code style.
- has code completion
- has very good code searching
- has an internal language interpreter that helps you with errors before starting to compile
- it works on many platforms
- ... many others
- and yes, IT WORKS
I know that there are many tools that cumulated do just that (cscope, ctags, vi with some "nice" .vimrc, gdb, sed, grep, awk ) but I don't have the time and the patience to INTEGRATE them. I somehow know how to use each tool and I will use it if needed but hey, I need to be PRODUCTIVE. Using a tool is not cool for me, and certainly it is not my purpose. My purpose is to get the job done. If I know some command line shortcuts I will use them, I won't rely only on the IDE if I smell that the job can be done faster in a different way.
This is where I think there's a problem with the command line folks. They don't want to start some IDE because it is "heavyweight", "bloated" and that IDE simply wraps around some command line tools and hide everything for you. But that's the fucking purpose, to hide some complexity so you can focus on the job and not on the tool. For simple tasks you might make it with command line and an editor, but for larger projects you will fuck up fast, or die in anger.
So don't use a tool to be cool!
Use it to get the job done! No matter the tool is an IDE or some obscure perl script.
Monday, May 12, 2008
Employer/employee
I raise this question because I believe that people who hire are *mostly* insane, idiots and do not have contact with the company's real problems when they try to hire someone.
And I'll say from the start that many of the things I will tell will be IT related mostly because this is the only perspective I have so far: employed as a software engineer.
What do employees want?
Of course everyone wants a great person who is smart, fun, social, knows to do its job well and most of the time finishes his tasks on time.
What do they get ?
They get a lot of people coming in order to get hired, but rarely something that fits all the criterias above.
Come on, let's face it: if you're (very) good at computer you usually have a shitty social life. And there goes fun and social attribute.
They rarely see someone who knows how to balance betwen those attributes not exagerating with one or more.
But most of the jobs don't require a lot of high tech knowledge and the employer still wants very good people, though they are not doing interesting stuff, that can challenge them. This kind of employer is the no. 1 idiot. Why in the world would you buy double barreled shotguns to kill flies? It's the same fucking thing. This is because they are afraid to hire someone who *can* do the job but is not as good as others may be. They are afraid to take chances, they are idiots simply because they cannot measure how much a possible employee should know in order to get the job done(in time). This is all that matters in the end. You shouldn't hire people a lot more smarter than what you need, because they usually get bored, even if the interview was great and interesting. They will eventually leave and you'll find yourself with a BIG hole in the company because you saw that he can do this and that ... no need to hire another one.
Ok, let's leave the employeer and focus on the people that can be hired.
If you come to think a little (not more) we can easily find the extremes of the candidates:
- very skilled but unreachable through dialogue unrelated to their "skills"
- poor skilled but very fun and who easily finds a way to make everyone feel ok, with no interest in something specific
Ok. So which one of thos would you hire?
Some would say to hire the skilled one. I would say you have a better chance in the long run with the poor skilled idiot. Actually I wouldn't hire any of them.
Probably I would be hiring a social person who knows how to learn fast. This kind of people are by far much more interesting than any of the geeks that cut themselves shaving every 3 months but can write a program head to tail without a warning with just a pen and a paper. They may not be as much as interesting as the poor skilled idiot but you can work better with them.
You know, it is not important for a person to be the best at what he does, he must have excellent comunication skills. These are the key factors in a success of any type of organization that resembles a firm/company.
The great ideas of success come from people who were by no means the best at what they did, they usually knew who to talk with and especially how to talk.
So what is the criteria of hiring?
Does it matter how you look a lot?
Is it necessary to be an expert at what you do?
Do you need excellent comunication skills?
Do you have to make everyone feel well?
Do you have to be good looking?
I guess it cannot be put in a mathematical representation like a function. It usually depends on the employer [who's an idiot in many cases], depends on how big the company is, on their criteria (many firms hire a lot of idiots because the firm gets paid depending on the number of employees, although they actually do nothing, they warm the chairs and the firm gets paid...)
I would bet that people should focus more on the social profile rather than the scientific one, always having in mind that a equilibrium must be reached between the two. Without this balance each one of these profiles becomes useless.
And I'll say from the start that many of the things I will tell will be IT related mostly because this is the only perspective I have so far: employed as a software engineer.
What do employees want?
Of course everyone wants a great person who is smart, fun, social, knows to do its job well and most of the time finishes his tasks on time.
What do they get ?
They get a lot of people coming in order to get hired, but rarely something that fits all the criterias above.
Come on, let's face it: if you're (very) good at computer you usually have a shitty social life. And there goes fun and social attribute.
They rarely see someone who knows how to balance betwen those attributes not exagerating with one or more.
But most of the jobs don't require a lot of high tech knowledge and the employer still wants very good people, though they are not doing interesting stuff, that can challenge them. This kind of employer is the no. 1 idiot. Why in the world would you buy double barreled shotguns to kill flies? It's the same fucking thing. This is because they are afraid to hire someone who *can* do the job but is not as good as others may be. They are afraid to take chances, they are idiots simply because they cannot measure how much a possible employee should know in order to get the job done(in time). This is all that matters in the end. You shouldn't hire people a lot more smarter than what you need, because they usually get bored, even if the interview was great and interesting. They will eventually leave and you'll find yourself with a BIG hole in the company because you saw that he can do this and that ... no need to hire another one.
Ok, let's leave the employeer and focus on the people that can be hired.
If you come to think a little (not more) we can easily find the extremes of the candidates:
- very skilled but unreachable through dialogue unrelated to their "skills"
- poor skilled but very fun and who easily finds a way to make everyone feel ok, with no interest in something specific
Ok. So which one of thos would you hire?
Some would say to hire the skilled one. I would say you have a better chance in the long run with the poor skilled idiot. Actually I wouldn't hire any of them.
Probably I would be hiring a social person who knows how to learn fast. This kind of people are by far much more interesting than any of the geeks that cut themselves shaving every 3 months but can write a program head to tail without a warning with just a pen and a paper. They may not be as much as interesting as the poor skilled idiot but you can work better with them.
You know, it is not important for a person to be the best at what he does, he must have excellent comunication skills. These are the key factors in a success of any type of organization that resembles a firm/company.
The great ideas of success come from people who were by no means the best at what they did, they usually knew who to talk with and especially how to talk.
So what is the criteria of hiring?
Does it matter how you look a lot?
Is it necessary to be an expert at what you do?
Do you need excellent comunication skills?
Do you have to make everyone feel well?
Do you have to be good looking?
I guess it cannot be put in a mathematical representation like a function. It usually depends on the employer [who's an idiot in many cases], depends on how big the company is, on their criteria (many firms hire a lot of idiots because the firm gets paid depending on the number of employees, although they actually do nothing, they warm the chairs and the firm gets paid...)
I would bet that people should focus more on the social profile rather than the scientific one, always having in mind that a equilibrium must be reached between the two. Without this balance each one of these profiles becomes useless.
Subscribe to:
Posts (Atom)