What Does it Mean to be a Programmer
Ruby’s just a tool. You’ll never hear a lawyer say: I’m a Microsoft Word lawyer. Check out this contract! Copy, paste, nailed it!
I find the hard part of learning a new programming language is not the language itself, but the ecosystem. When I write software in PHP and have a specific task I often know the frameworks and libraries to help me, I know exactly where to look for them and if a library is good or bad. The boom of package repositories such as Packagist, NPM, RubyGems, CocoaPod and so on make it easier to find new packages but you need experience with the community, the language and the conventions of the language to judge if a package is useful, well written and well mantained. Connected to this is the fact that knowing a programming language does not enable you to write a “big” application in it. Often it’s more effort to learn a new framework than a new language. Full-stack frameworks like Symfony, Rails or Django are monsters with hundreds of APIs, conventions and configuration formats.
Above I said that I am confident that I can write any program in any language. What I didn’t say is that I can write any program in the best possible way in any language. You still need years of experience to master the nitty gritty details of a programming language. And often execution environment matters in addition to the syntax of the language. Let me give you a quick example in PHP:
Which of the two methods executes faster? Well. It depends.
- In PHP 5.3 when the arrays have 100,000 or more elements Method 2 runs faster.
- In PHP 5.5 Method 2 only runs faster when the arrays have more than 10,000,000 elements.
Clearly there have been some optimizations to the
array_merge method over the years. I don’t have an installation of HHVM ready but the results there may be different again. I don’t know such specific performance implications when writing Ruby oder Python code. Years and years of experience, debugging and frustrations gave me such a deep knowledge about PHP. As we can see in the differences between PHP 5.3 and 5.5 the behaviour of the platforms changes in addition to the syntax; if I once knew every optimization doesn’t mean I know them in the next version.
I believe that a programmer becomes a professional programmer by being able to generalise specific solutions in a specific programming language on a specific platform to programming in general. If you can systematically identify problems and solve them systematically (and reproducable) you have become a professional programmer.