Syntax is easy. Languages are a bit harder…
(A note to would-be designers and developers, and to myself.)
You don’t really know a language till you know the library and the tools. Syntax is easy.
Look: any trained C/C++/Java developer can pick up the syntax of Javascript or PHP in no time flat. They’re just not that different; the hardest adjustments are to using an interpreted language instead of a compiled language, and to dynamic typing instead of static typing. Even with a language a bit further out – Python or Ruby, for example – the syntax remains relatively straightforward to learn.
But here’s the trick: a language is more than syntax. Think about it: English is more than its grammar, and indeed more than merely its vocabulary. Learning English requires first learning its vocabulary and its grammatical rules. Mastering English, however, requires learning far more than simply words and the basics of how they fit together. It involves gaining a knowledge of connotation as well as denotation. It requires understanding of culture. It demands grasping the ways that different words and phrases and approaches are appropriate (or not) in various contexts.
The same is true for a programming language. It is one thing to know how to construct a foreach
statement in PHP. It is another thing entirely to recognize that sometimes you’re better using a library function that does the same thing you want your loop to do, only faster and better. You have to learn the libraries, and in some cases you have to learn the standard tool sets.
Learning Ruby is one thing. Putting it in practice in the web development community means learning more than Ruby or even its standard library though; the vast majority of Ruby web development these days seems to be using the Rails framework. Similarly, you can have a good handle on PHP and even know its library well – but you’ll be much more employable if you also know the Zend framework, because while it’s not quite an industry standard, it’s close.
Even back in the world of static software, this is true. Good luck becoming a top-notch C++ programmer in a short time. Learning the way C++ approaches object-oriented development is simple. Learning the enormous library will take longer. Getting a good handle on templates? You’ll be at that for a while.
This is the thing so many people fail to understand: software engineering (and even programming, which is only a subset of engineering) is more than knowing some syntax or the basics of logic. Being a really good developer – being the kind of developer I hope to be someday – requires having a good handle on the language and its library, its strengths and its quirks, the primary tool kits and the corner cases. It is not enough to be able to regurgitate the syntactical rules for the language; best practices come to be over time as people discover both the benefits and the costs of various approaches. The most obvious solution may also end up being the wrong solution.
The only way to gain this knowledge is by immersing yourself in using it and by studying. You can either repeat the same mistakes everyone else has already made, or you can put forth the effort to educate yourself so you can avoid them. You can either content yourself with a superficial understanding of the language, or you can dive in and really get a handle on how it works and what really makes it tick.
Shockingly, these are the same realities that apply to learning any new subject. No one ever mastered the piano, or became a skillful tennis player, or really succeeded at gaining any skill without putting in significant time and effort. If one of the major benefits of the modern web design and development is that just anyone can jump in and start doing it, one of the problems is the same reality – because most of the people who jump in and start are not willing to do the hard work to actually become good at their field. They don’t want to study, they don’t want to dig in to the hows and whys as well as the whats of any given discipline. And accordingly, they just aren’t very good.
If you’re not prepared to work hard, be prepared to always be a third-rater. If you want to do well, be prepared to work hard. Stop thinking you know a language because you know the syntax. Stop thinking you know design principles because you’ve read a few articles. Stop thinking you don’t need to study any more. You always need to study more.