Staying On-Top of Programming Trends?
GhettoPeanut asks: "Trends are constantly changing, upgrading, or become popular due to high end user demand or just basic usefulness. I do my best to keep up with the trends, believing that for the most part they will be better then the current methods in place, or just comfort in knowing that if enough people use it, that there will be allot of help out there. Ultimately though, its keeping up with these trends and trying to figure out what's a fad versus what's actually useful that's the difficult part. What do some of you do to keep up with the trends? Websites? Magazines such as Dr. Dobbs? Forums? I know there's not one solve all, but for the sake of argument, suppose you wanted to stay on the forefront of Java based web development, what would you do?"
1. Other programmers I know in various fields. I happen to know quite a few.
2. The plethora of content Sun, Java, MySQL, Microsoft, Oracle, and many other high-profile "framework sponsors" push out on various developer networks, such as MSDN, DevZone, OTN...
3. Whatever the hell O'Reilly is making books about.
4. Seminars and conventions, often made/endorsed/branded by computer publishers such as O'Reilly and aforementioned "framework sponsors".
I've really enjoyed 1001 Buzzwords for the Entry-Level Programmer.
Sheesh, evil *and* a jerk. -- Jade
This isn't what you asked, but you shouldn't follow trends, you'll just end up with a little knowledge of everything. Just concentrate on C or C++ for *NIX (or something similarly consistent) and you'll eventually be a guru, able to do anything you wish with it.
ResidntGeek
I would suggest Mono as an important project. As Microsoft designed it, .net's common language runtime can be targeted from practically any language. .net is equivalent to a standard virtual machine that provides a standard environment (duh). By allowing code to leverage other code and perform this work independent of any particular programming languages they've created a large developer base that can easily be ported to Linux via Mono.
8^p
Shh.
Read
First, you need to read a lot. Dr Dobbs, MSDN, developer blogs, books. To separate fad from rad, I recommend you use your own common sense.
For example, a few years back I worked hard to learn and understand the Unified Process. There were a lot of great ideas in there, but I felt it was too heavyweight and over the top for what I was doing. But I did feel it had brilliant ideas and revolutionary concepts. So I took what I thought were the most practical ideas and used them. The most important ideas I took were things like 1) throwing out the waterfall approach and developing iteratively, testing and "releasing" after each iteration, 2) identifying the biggest show-stopper risks up front and doing research to make them not so scary, 3) getting the customer/end user involved up front and through the whole process. A lot of people might shoot me for saying this, but it turns out that the Unified Process was pretty much a fad, and those key concepts turn out to be the foundation for "Agile Development" and "Extreme Programming."
The point is, read and study anything that interests you, and decide for yourself what's useful.
Succeed
Second, you need to do stuff to get success stories you can tell when you're interviewing or selling yourself to your current employer. A lot of book knowledge doesn't do diddley if you don't put things in the done basket. Ever see people at work with dozens of spiffy certifications that can't code their way out of a paper bag? Don't be like that. Do lots of stuff and do it successfully.
I recommend you work on anything you have some passion for, even if it's not directly work related. For example, I did a lot of 3D programming when I was working as an Oracle PL/SQL developer. Totally unrelated to work. But I honed my OO skills, learned OpenGL and DirectX, learned a lot about 3D math. Although it took a while to pay off, all of it did eventually pay off. Knowledge of C++ helped me answer tricky STL interview questions, and I later got a job with a company that makes interactive 3D training software for jet mechanics-- way cooler than Oracle. And even though this wasn't work-related, I was able to include that work in my list of success stories I could tell potential employers and other people making decisions about me.
So do whatever you have a passion for, and do it successfully and to completion.
The best advice I have heard was from I believe Martin Fowler who said to learn a new language every 6 months. So, instead of learning the differences between JSF and Struts, pick up a Rails book, or Python, or Boo, or Lua. (Except if part of your job is figuring out the differences between JSF and Struts)
Several of my coworkers attended JavaOne, and while I would have liked to have gone, I'm much happier going to Agile 2006 where I will get exposed to a wider variety of things going on. For example, if you haven't tried Rails, it is a great way of seeing how using sensible defaults can get something up and running quickly, and how extension can keep it maintainable as it grows.
Same thing with ASP.NET. The event model for web pages is really great, and I've built some neat apps in ASP.NET which let me use some of the cleanest MVP seperation possible.
So, if you want to know more about Java, pick up some other languages. You'll find yourself wanting to do even more.
Random Musings
Learn general fundamental stuff first.
:-)
Like: LISP, the relational model, etc.
Then after a while you'll notice that most everything is a subset of something that's already been invented, but with a different name, or a different syntax, or a different "marketing angle".
Ruby? Python? Different subsets of Lisp with more interesting syntax.
Ajax? A more complicated way of doing client/server communication.
SQL databases? Kinda like a relational database, but simpler.
Object databases? Take the relational model and add a large number of constraints, tada, there's an OO database.
FreeBSD vs. Linux? Mostly the same.
You might also become quite bitter and annoyed with the IT industry after a few years.. try not to take it out on others.
But seriously, concentrate more on what make things ALIKE. Vendors and people who haven't been in the IT industry very long will try and convince you that what they have is revolutionary and exciting, etc. They'll try and ridicule your "old-fashioned" view of whatever it is. Just smile politely and try and apply your existing knowledge with the syntax or the pretty face of "their" technology.
Shoot myself.
More seriously, trying to stay up to date on every new trend is pointless. You're better off picking a few things and learning them well.
Maybe not
I know Java very well, but my true strength is in design. It doesn't matter what languages come and go, those skills will always be useful.
Learn good communication skills so others will think you are competent. Even if you aren't.
Learn persuasion skills so you get good compensation.
Prepare side interests that you can ramp up into money-making ventures in a few months. If your company folds, you get laid off, or you decide to retire (or just plain quit) and the job market sucks, you at least have an avenue to pursue.
@HbFyo0$k8 tH!$
1) The biggest news in Java is that you don't have to program in Java anymore. Popular languages like Python, Ruby and Eiffel(HA! Loser.) have all been ported to the Java VM, and have access to to the Java libraries, in addition to the Python/Ruby/OCaml(HA! Loser.) libraries.
2) You will only ever need to know Java, Ruby or Python to make it as a Web Programmer.
3) RoR is teh hawt. On the Java side, knowing Spring, Hibernate, struts, jUnit, JSF and (hold your nose) Beans will get you far. Python? HA!
4) Python was in, now it's on its way out. Python geeks can keep the perl geeks warm when it snows. Take comfort, the Ruby guys will be there to huddle up with you in five years. PHP guys don't get paid, but will be wanted by people who don't like to pay programmers.
5) C++. How quaint. You must have come from the game programming field. Perhaps you should go back there? We sure as hell don't want you. Go and keep the LISP guy company at the geezer end of the bar.
SoupTellsItLikeIt Is
Read Slashdot of course!
Yes. Slashdot has quite a reputation for attracting knowledgeable people, yet be aware that some are rather biased towards OpenSource. And don't forget that people who do OpenSource (me including) have a rather absolute opinion. So as long as you are a little sceptic you should be able extract the trends.
As you mention Java you may well notice that currently any Java discussion always tends toward flame wars. Flame wars are always signs that something isn't good, that the there isn't an uphill trend. Flame wars always arises when the future (a trend) isn't going as wished.
I'm probably much biased but IMO the future trend in software development is "cross-platform". So far for many years you could do resonable cross-platform development only with Java. Today you can equally well do cross-plaform development with AJAX or with wyoGuide (binary applications, http://wyoguide.sf.net/). So regardless which of the different technology takes the lead, cross-platform development will increase to the point where single-platform development won't be accepted.
O. Wyss
See http://wyoguide.sf.net/papers/Cross-platform.html
I figure learning that language will take me about a day and a half.
True, C# isn't a hard language to learn. I find it a little disjointed as I'm primarily a Java guy, but it's simple to understand.
The problem with C#, or indeed Java, is that the API and associated frameworks do so much for you, but take a long time to master. Some of my early Java code is needlessly verbose because i simply didn't know that the API made certain functionality available. Now that i'm competant in a small number of frameworks and have better learned the development tools, i find i can work a lot faster.
It doesn't take long before you become so used to the framework that programming in C or asm seems like reinventing the wheel.
1. Plan on studying something new every 12-18 months.
2. Don't just concentrate on technologies. Study Project Management, Emotional
Maturity, Presentation skills and public speaking. Think of yourself as an
investment, you want to hedge your down-side by making sure you have skills
completely outside the particular situation you are in at any given time.
3. Review yourself every 6 months or so. Are you stuck in a learning rut, continuing to
read the same types of junky "Visual Basic in 21 nanoseconds" or are you actually
challenging yourself?
4. Review the basics every so often. Go back and read a deep book on analysis of
algorithms or databases or language design.
5. Try to push yourself out of your comfort zone every few years.
6. Don't get too hung-up on the buzz-word du jure. 90% of them will last a millisecond
in your career.
7. Treat everyone you come into contact with as a teacher.
You want to know the latest trends for Java-based web development? Fewer and fewer people are going to be doing Java-based web development in the future.
Fuck trends. They're wrong. Every day the industry continues to stay with its current ridiculous technologies when vastly superior ones were invented decades ago infuriates me further. If it doesn't infuriate you, you're not paying close enough attention.
My advice: read Lambda the Ultimate and Steve Yegge's blog. Endeavor to learn what the lambda calculus and referential transparency are. If you are sincerely interested in bettering yourself as a programmer and don't go find out who Alonzo Church was then so help me God I will kick you in the balls. Learn about SML and type inference. Learn about Haskell and monads. Learn about process calculi and Erlang. Learn about Lisp and code generation and domain-specific languages. Learn about Scheme and lexical closures and continuations. Learn about Smalltalk and what OO was really supposed to be. Learn about type theory and formalism and the Curry-Howard correspondence. Learn about Forth and Joy and how you can have a powerful, expressive language without even so much as a grammar. Learn about Intercal and Befunge and just how badly your choice of programming language can torture you. Learn about UML and Ruby on Rails and Seaside and agile programming and Java generics and Python generators. Learn about aspect-oriented programming, context-oriented programming and concept programming. Learn about multi-paradigm languages like OCaml or Oz. Learn about weird Lisp dialects with syntax like Rebol or Dylan.
Realize that library design is language design. Realize that asynchronous programming with callbacks and explicit state in a world where lightweight coroutines were around in the days of fucking Simula in the 60s for Christ's sake is cruel and unusual torture. (Sorry, pet programming construct.) Realize that the programming language research community, while considering systems programming a solved problem and generally not interested in talking about human factors, is doing some genuinely promising work. Did you know that there are conc