An advice to a fellow developer – 2

The part 1 of the post is here.

— continuing —

So back again – different coffee shop (Starbucks at Carling), freshly charged battery, Grande Latte and no internet connection (which means no distractions from emails and the Web) – here we go again, part 2.

If I should single out one or two technologies that I think I have neglected and should have paid much more attention to it would be the Web trio of HTML/JavaScript/CSS as one and the SQL as second.

Let’s look at the Web trio first. It sounds weird – how can THIS be neglected, everybody knows HTML, right ? Wrong. What I mean is to have deep understanding of the HTML markup, so that you know when to use (and when not to use) tables, how to properly layout your page, fully understand the possibilities and implications of div and span, the box model and what can and cannot be done with styles and CSS. And I do not mean using Dreamweaver like tools or (god forbid) Frontpage to create the markup, I mean actually writing the markup. Ability to produce and maintain clean markup is very important for application lifecycle and evolution. Clean markup is at the beginning of every good looking site. Even if you get the first mockup version from your  designer, it is up to *you* to componentize the pages, convert them to JSP or ASP.NET or RHTML (or what server side stack you are using). And it is up to you not to mess it up in the process.

The CSS is trickier – it is considered to be “designer’s thing” between us, developers. And designers, they are those slightly weird artistic folks with Photoshop magic lassos and Macbooks that just somehow make things look great for no particular reason. They are so different species and us, developers who recognize 16 basic colors and do not mind using Times New Roman for everything will never be able to match their skills … This is partially true. It is hard to learn creative design. But even if you never will, it is still important to understand ENOUGH of CSS to know what can or cannot be done with it, so that you can maintain and enhance the design of the page without messing up the styles or the markup. You would not believe how big PITA it is to go through 100+ pages just to extract hard-coded font and size references, inserted there by the previous contractor who did not know any better … Do not do that to the guys that will maintain the app after you, it is very bad thing for your karma.

The HTML/CSS/JavaScript is also very important because it is the third platform, and despite JavaFX, SilverLight, Apollo and Flex flexing the muscles (pun intended) and a lot of buzz about the RIA, the traditional web technologies it is not going to go away any time soon. Listen to David H. Hansson interview for more. This stack is all you need to create Firefox extensions, new social network apps (like Facebook) and it will be important for the iPhone/iTouch and alike devices.

JavaScript is particularly tricky: the language itself is actually great and very powerful but got very bad reputation. Partly because it makes very easy to write very bad code, but mostly because many people using it have not enough experience or programming background and produce terrible mess. Not enough good books also contributes. I mean there are many books on JavaScript, but most of them bad or mediocre. We really need to learn or re-learn JavaScript and use it the proper way. I personally would pick JavaScript against Visual Basic any time.

The reason that I mention SQL is because most developers know just one part of it – how to select some data, insert or update. There is another part – that deals with creating tables, indexes etc and is usually “owned” by the professional DBA’s. Which is OK if you have one (and, btw, NEVER EVER trust a “DBA” that cannot create your database tables by ssh-ing to console on the server). In absence of dedicated database pros, many developers rely on GUI tools to get to initial stage of database structure, create tables, views etc. Problem in this that GUI tools cannot be version controlled and without having actual script that creates your database from scratch and loads all test data, your project environment is incomplete and you can never create good enough unit tests that will work. I have seen this to be an issue so many times that it is not even funny. Look at the migrations in Rails and how elegantly these guys solved the problem for Ruby world.

But enough about technologies, I’d like to add few closing more general remarks and mention some good books and sites.

Software development is a discipline somewhere between engineering and creative writing (it stubbornly resists applications of engineering methods like precise estimations :-)). Same as with writing, similar path will lead you to improvement of your skills. If you want to become great writer, read a lot. Read and dissect the text, think about the storyline, plot, setup, way how the dialogs are constructed and words used. If you want to become great developer, you also need to read a lot – not only books (we will get to that), but also code. Reading good code is crucial and is very intellectually stimulating. Reading means understanding how it is designed, thinking about the relations, architecture, idioms and noting nice tricks and howtos. As with literature, the ease of reading will depend on the language (you are native Java speaker) and your preferences / predispositions. In both cases it is important to select high quality reading material. Fortunately, that is easier that it looks like as with books because there is a consensus how should good code look like. In Java world, going through the source code of Spring Framework will teach you a lot. Look at the source code repositories that do some pre-selection of the projects such as CodeHaus rather than general sites such as SourceForge. For .NET world, look at the CodeProject, select one of the highly rated contributions and chances are very high that you will be OK.

Last but not least – few books and sites.

One great book that would be IMHO just right for where you are at is Refactoring from Martin Fowler. This is very easy way how get the spirit of the design patterns – IMHO better than reading the Gang of Four as the start – which is absolutely a great book to read, but maybe not the ideal to start with.

There few great books covering the “craft” of software development. The classic Pragmatic Programmer (which started the whole company) and Software Craftsmanship will give you more good advice on career of software developer than you may ever need :-). from Microsoft camp – even bigger classic  is Code Complete.

As for sites and blogs – there are way too many blogs and feeds of interest, email me, I will send you my blog feed from Google Reader. From programmer’s news I am keeping and eye on Dzone, InfoQ, TheServerside.com and theserverside.net. They may be not the best, but I found out that to actually get some time to do some coding and code reading, one must limit the news consumption …

Thats about it.

Happy coding, may the Source be with you 😉

PS: Thanks to all who managed to read until here and even bigger thanks for emails and comments to the part I. Your feedback is appreciated.

Advertisements

5 Responses to An advice to a fellow developer – 2

  1. Joel says:

    Great posts Miro! Tough to argue with any of this advice.

    My personal opinion is that the Pragmatic Programmer should be mandatory reading for all our new employees. It’s just flat out the right way to think when writing software.

    I would also add that besides languages it’s also important for people to learn a basic set of protocols most importantly TCP/IP and HTTP. I don’t mean learn them inside and out but having a good knowledge of how they work is really important. I’ve met a ton of web developers that don’t even have a basic understanding of these protocol – this undoubtedly makes it difficult for them to debug their code.

  2. Shane says:

    Very good read… kudos Miro.

    For more the .NET-centric readers, I’d also recommend that they periodically check out dotnetkicks.com (its a kind of Digg site for .NET dev news links). I find it often gives a nice one stop shop of up coming features or techniques.

  3. Milan says:

    Thanks Miro, great reading!
    For absolute starters with Java I would recommend Bruce Eckel: Thinking in Java at http://www.mindview.net/Books/TIJ/.

  4. lanna says:

    One book I think every Java developer should read at least twice is Effective Java, by Joshua Bloch.

  5. Miro says:

    Wrt Bloch: Could not agree more. I have read the first edition about 10 years ago (I believe), there is now second edition out there – http://www.amazon.ca/Effective-Java-2nd-Joshua-Bloch/dp/0321356683.

    Btw, great talking to you on Fri.

%d bloggers like this: