Is it better to keep up or stick to what's already known?
It’s the road
I started long ago - in 1988 - with ZX Spectrum BASIC and Z80 assembler. Then came Elwro 800 junior (ZX clone) with it's then-cool CP/M and Turbo Pascal. Then came Commodore C-64 and I learned 6502 assembler on it. Then I got access to first PC-s like XT/AT/286/386/486. It was so cool. New TP 6.0 and 7.0 seemed so all-powerfull back then. And 80x86 assembler? WOW! And those 256 colours! Neat! And there was a lot more on the way...
20+ years later most of this hard learned knowlegde and skills is useless. Who cares what POKE 23606, n does? Or why care about LDIR anymore? I'm happy I never learned Fortran or Forth or Cobol (last one may however still be usefull)...
I'm quite conservative and tend to stick to what I mastered. Until recently (it’s year 2011, not some dark ages!) I still used Delphi 3 (which costed me a lot when I bought it). After I first learned it something like over 10 years ago I remember myself thinking: that's the ultimate tool, now I can code anything and I'm not afraid of Windows anymore. Now I’ll create best software ever! Now I'll be famous and rich... :)
And again - now D3 is crap and even D7 is so... For example all those problems with unicode / UTF support... Nowadays people (my endusers) use XP/Vista/W7. I’m the only one I know who still uses W2K as primary OS. Delphi 3 is just so outdated... One of my old quite widely used apps (OCOP) doesn’t even run on W7... And what about mobile applications?
Maybe it's time to move on... I was so excited with object oriented programming, big hard drives, and lots of memory and CPU power that I was happy to forget about 8-bit stuff (lots of old tapes and floppies with assembler subroutines I never got the chance to put to good use).
But what to do with all that new code written for years (and often unfinished)? And all that stared projects that never came to be? The further you go the more you carry. It may become too heavy and you may get too slow. Open source may be some option. But there are some risks here.
Challenges
And there are challenges. And they are the blessings. They seem good in long term. Some new skills are required to do new things. Things that were impossible yesterday but now are not only oh-so-cool but even just a standard. For example mobile apps on Android. I always disliked Java. Why use eating resources VM to just write „Hello world!”? On ZX it would took only few bytes and run under miliseconds (CPU @ 3.5 MHz). If I now have over 1GHz CPU why wait seconds just for the environmet to initialize? It’s exaggeration, I know, but it shows my dislike. And now here I am. Willing to code for Android I finally started to learn Java (and new Android API / philosophy). And guess what? It ain’t that bad. In fact it’s pretty cool actually. And it’s much easier that I ever tought. However old (not bad) habits need to be kept in check.
Some loose list of pro and cons
Stick to old is good
- you do what you know that you know and you know you’re good at it so you keep the quality
- what you do is easy and pleasant, no suprising obstacles or setbacks, just pure zen of coding
- you make less stupid or catastrofic mistakes because you already know the thing you ougth to
- you remember there are some users / people who are also stuck in THE OLD, you don’t abandon them
- new things happen everyday but they don’t disturb you, again it’s perfect bliss
Stick to old is bad
- you loose touch with what’s going on
- you can’t do anymore (new) things that are in fact easilly possible
- you stop developing yourself professionally
- everybody (competition) is ahead of you
- you might oversleep the next big chance
Move on is good
- you stay fresh and challenge is your friend not your enemy
- you keep in touch with reallity (if there’s such thing)
- you keep your options open
- you have better chance you have/know/create what your users/clients need
- you can achieve more for less (time, effort, money)
- there’s excitement in what’s new
Move on is bad
- better is the enemy of good
- new hi-tech super-hiper stuff may be outdated tommorow, before you even master it’s use and application
- sometimes it’s better to wait and see what will unfold (eg. Symbian/PalmOS vs Android)
- new software is just old software but with new bugs
- you often start from scratch
- if you put all your data in one cloud it can one day evaporate with it and the rain will be cold
It’s all in emotions, it’s all in the habits
We all cling to once familiar (I think it’s a quote from Star Trek, but I’m not sure). This is an emotional response. Natural really. But not always helpfull. I learned Delphi the hard way, with stress, with fun, with deadlines, with try and error, with 12h coding sessions. Am I to just throw it all away? No way! Learn Java, C++ or C#? Who needs this crap. I can do all that in my favorite, the best and coolest... not so special, not so universal... Basta! How do I code for Android in Delphi? I don’t.
Some habits are good and independent of language / platform. These are worth keeping. You learn to think in certain way. You refine that thinking. It is beneficial all the time. But when you still into DOS it cannot be good.
Conclusion
I belive one has to find the right balance. As with everything in life. Some thing are holding me back and they are worth leaving behind. Some new things are promising and they seem to be the future. They are worth learning. Go forward and look forward, but remember whre you came from and draw from what you already know. Some technologies and tools become obsolete but all the gained experience is the essence. Stick to it and move on.
p.s. It’s not either or – it’s old and new.
This is really a well written insight into the struggles of many over-30 years old coders nowadays.
ReplyDeleteI will only scratch a surface in my comment..
The object-oriented approach was a big hope for everyone, mainly because it promised unending software reuse. Well, it turned out such reuse is not that much possible, because there's also a dimension of versions changing in time which often have incompatible APIs. Add to this an economic pressure causing unfair competition between some library vendors and then there we have a small private hell. Also, in object paradigm, components are tightly-coupled - we can say that everything is having 'sex' with everything else. It's not always much fun to maintenance such library interrelationships.
These days there's slow coming of functional programming - it got out of its academic roots and is becoming very practical. The notion of stateless pieces of code with turns inputs into outputs (a bit of Unix way, isn't it?) is appealing to many. It's a direction worth exploring for sure.
I also think there's still lot of value in knowing and even using low-level stuff like assemblers. It switches mind to a different mode which can benefit us later, even when we're coding something hi-level and don't use asm directly and commercially.
There are also amazing splits between hi- and low-level. Have look at Royal's Z80 asm written in Ruby - a language several layers of abstraction above. The trick is that in Ruby you don't have to use parens in a method call, so the text "xor a" can be really a call of method generating the binary. You can run the output in an emulator - pretty neat! http://github.com/royaltm/z80-rb
cheers,
-- frk
in the last paragraph of my recent comment please mentally do s/splits/joins/
ReplyDelete