Posted in Development | Posted on 02-14-2009 | 13,181 views
Asoka asks:
I need your advice, Ray. I'm at sort of a crossroads in my career right now and am looking to either move up or move on to greener pastures. I'm in a web developer position in the federal government and I've been building web apps with ColdFusion for several years. What I want to know is, what would be a better option for a developer like me who's looking to move up: (1) Learn a ColdFusion framework, gateways, and a bunch of other advanced CF stuff that I don't already know, or (2) learn PHP or another entirely different programming language. I'm sort of leaning towards the second option because I *think* it would give me greater flexibility and marketability and I want to avoid being a "one-trick-pony", especially in today's competitive IT job market. As always, thanks for your expert guidance and assistance!
So before I offer any type of career advice, I'll remind folks that I probably don't have the best history for someone who should be offering suggestions. I think I've had around 5 jobs or so over the past 10 years, which averages about a job every 2 years. My wife and kids have been understanding of this (thank goodness!) but I'm probably not the example you want to use if you specifically want to 'move up' in an organization. That being said, I'll try my best to offer some thoughts on your main question - should you advance your ColdFusion knowledge or focus on learning other languages?
The short answer is Yes. In other words, I don't think this is an either/or scenario. Advancing your knowledge of ColdFusion with frameworks and 'other stuff' tends to cover things that impact your development no matter what language you are using. Here is an example. When I picked up Model-Glue, it helped cement the concept of MVC in my brain. I had never really understood MVC until I learned Model-Glue, and more importantly, actually used it in a few sites. Then when I began to use Flex, the whole concept of the MVC was something I could bring to the table in client-side development as well. It wasn't simple for me in Flex, but I had a much better understanding of what I should be doing even if I wasn't sure at first how to do it. (Thankfully I've had a lot of experience in this at Broadchoice!.) I'm not saying everything you learn in ColdFusion will translate to other languages, but it seems like a lot of it has an impact on what you do elsewhere, which is kind of cool! (Anyone else finding that?)
As for learning other languages, that is kind of a no-brainer. Having multiple skills under your belt will definitely help out, especially in a job market where people, unfortunately, tend to look for a checklist of skills instead of good development skills. I'd easily hire a PHP person if they showed intelligence and the ability to apply their knowledge to other languages. But I'm probably in the minority there.
You didn't ask about what other language to learn, you just asked if you should learn another language, but I'd suggest that learning Flex/AIR would be a huge benefit to you. With ColdFusion on the backend and Flex/AIR on the front end, you have a powerful combination of skills. I'm not sure how much the current economy has impacted this, but from a pure greed perspective, I remember hearing quite a few outlandish salaries in regards to Flex developers. Since Flex development is fun in general, I think 'lots of money'+'fun' is something worthwhile pursuing. I'd also look into improving your JavaScript skills as well. Both Flex and JS work great with ColdFusion, but aren't tied to ColdFusion. So right there you have a nice set of skills that are portable across multiple types of backend environments.
Anyway, I hope this helps a bit!


And, IMHO, .NET just...sucks. It seems to me that MS sat down and said, "what can we can to make it as difficult, confusion and...I don't even know, OBTUSE?.... to build a useable, scalable and maintainable web 2.0 application?" And then went about building every item on the list into the language.
If you want to have a long, lasting career in web application development, I suppose its POSSIBLE to concentrate only on Adobe (formerly macromedia, formerly Allaire) products (which are my personal first love). But your life will be a whole lot easier if you have at least a passing familiarity w/ MS products.
Sorry for the rambling.
1 - database design
2 - CFML & HTML (basic)
3 - Javascript
4 - CFML (advanced)
5 - systems administration
6 - SQL Server DBA
7 - project management
*Here's when I began getting more involved in the CF community: cf-talk@houseoffusion.com, riaforge.org, coldfusionbloggers.org, etc. Should have done this *much* earlier.
8 - CF Frameworks (fusebox.org, cfwheels.com, etc)
I have been interviewing and hiring CF guys for over 5 years now. The most painfully obvious fact that I have discovered in this time is that there is a MAJOR shortage of "advanced" ColdFusion developers. I dont mean guys who have been coding CF for over 5 years or so, Im talking about guys/gals who really thirst for better ways of doing things and are always pushing the envelope with CF.
The vast majority of CF developers are still coding top down and have their heads in the sand when it comes to ColdFusion.
I agree 100% with Ray that you should spend some of your free time learning another language, no matter what it is. However, if you really like ColdFusion, learn your craft! Dont worry about being a one-trick pony. There are lots of us that have made a VERY good living with ColdFusion. Personally, I have made a career of 10+ years out of ColdFusion and still going strong.
If you will take the time to learn the newer methods with ColdFusion and how to take advantage of the all the really great work that everyone is doing, you will make yourself a valued commodity in this community. Guaranteed!
Am I a master of any of these -- no. But I know enough to know when to get help. But the most important point is that I'm busier than a one-legged man in a butt kicking contest right now. I can honestly say to most clients "Yes, I can help with that."
So, do what you can to be able to answer "yes" and you'll be good.
Great comment John!
Also, consider attending "IRL" stuff: CFUG meetings and CF Conferences. I really hope to attend cfunited.com this year!
Speaking _strictly_ personally, I tend to learn a bit slowly. I'd caution folks to try to take things one step at a time when it comes to learning.
Here is a practical example. Imagine you don't know ColdSpring, Transfer, or Model-Glue. I would NOT recommend learning all 3 at once. I certainly didn't. I learned MG first. I then learned ColdSpring. I then learned Transfer. This has taken me - probably 3 years! But I would now feel confident using all 3 in one project (if it made sense of course).
@russj: I think at the end of the day there are 2 things in play here. First, what I said in the earlier comment about how being involved in the community makes you a minority - well, so does advancing your skill set BEYOND what is required to "get by". Most folks will just do what they have to do get a paycheck. That's not a sin of course, but it does probably describe the vast majority of folks out there slinging code. Secondly - with CF being so darn powerful, sometimes there is less incentive to learn the more advanced things. I'd be willing to bet that - with the right hardware of course - you could do extremely powerful sites _today_ with CF 5. Shoot, maybe even CF 4.
You need to view it from the perspective of the business/employer. In other word, what will bring you NEW value. I agree with Russ that it is EXTREMELY difficult to find advanced ColdFusion folks, mostly because ColdFusion is so easy that you can get pretty far without having to really advance.
If you're already a decent ColdFusion person, and you get into some new features, or framework or whatever... that's great - on a personal level. But how much NEW value have you brought to your services? In this case, it's just an incremental improvement - it's still CF.
You need to be thinking about adjacent skills that will complement your existing ones. E.g. if you're staying at the same company, identify what skills in the company are missing - if you can learn those skills you boost your value to the organization tremendously. E.g. if you're ALL ColdFusion folks by trade, yet there's no formal Project Management going on, or no one in the team is a certified DBA, etc... That's the stuff you want to be learning.
Should you learn other web languages? Yes. Should you understand frameworks, MVC's, etc? Yes. That's just part of building your craft. That's expected by most organizations, even if it's not expected by most programmers.
At my current company, I'm surrounded by Universe Programmers (IBM database for those that don't know). Most of these people are one trick ponies, who have been coding in Universe for 20+ years. Which is why they are still programming in Universe. Why don't know anything else, and they haven't developed the other skills necessary to advance further in their careers.
In other words, learning is never a bad thing, but I always recommend learning things which help you expand what you already know.
@BrianKotek: Hmm, well, SQL is certainly important, critical really. Do I think people need to know it? I'm not so sure. If you work on a team with a good DBA, and your project is nicely broken up into MVC, then I think it kinda minimizes the need for the guy writing the server code to also write all the queries. Not saying it's _bad_ to learn, just saying that I tend to find SQL to be an 'art' and I'm happy to let DBAs write the SQL for me. One more reason I like Hibernate/Transfer. ;)
Get into application architecture and/or process management. Get closer to the business and become really valuable to the revenue generating components of that business. I know that’s not exactly the question you asked, but possibly one of the positions you are considering takes you in that direction.
I’d have to say, first of all, I’d agree with Brian – SQL is a transferrable skill between languages. The tool set for interacting with DB’s has gotten better (you mentioned Transfer, Ray), but with so many other facets of IT, knowing your SQL inside and out is a big advantage. Not just for the CRUD stuff, of course, but report generation, data verification, etc. Sure you may have a DBA at your organization, but the day may come when you don’t!
Cheers, and best of luck with what you decide.
Davo
The famous actors who are interviewed by James Lipton on "Inside the Actor's Studio" are always talking about the craft of acting. Being a professional actor means studying people wherever you are. Reading script after script. Going to auditions.
I think we should think about practicing the craft of being a computer programmer. I believe you said something a few weeks ago about not limiting yourself to just ColdFusion. We are Internet developers, not ColdFusion developers.
1) Vertically, by this I mean learn technologies that solve problems that aren't solved (or are inadequately solved), by ColdFusion. In this space, I also put depth, such as frameworks and deeper knowledge of tags. This is that path for someone who really like ColdFusion and the community and typically isn't afraid to move geographically, and for this path I recommend the following (not all at once, in some cases a CF developer might be adequate but not deep in these):
a) Learn the frameworks (Mach-II, Model-Glue, etc.)
b) Learn Java/J2EE (deeper server side capability)
c) Learn Flash/Flex/Air (rich client(s) that CF works well with, also gets your feet wet with mobile)
d) Learn Javascript (the browser isn't going to disappear)
e) Learn about service oriented solutions, such as web services
f) Learn SQL deeply (be able to teach about 'having', inner/out joins, normalization), then learn some db platforms (SQL Server, Oracle, MySQL, etc.)
g) Learn about SQL tools and automation solutions
h) Get involved in an open source project based on CF or Java
i) Get involved in sharing your knowledge via blog or user groups
2) Horizontally, this is for folks that either are not attached to to CF or have geographic challenges (can't move).
a) Research and choose a new language/platform to adopt as your new primary language, based on job availability and desirability, as well as your affinity for the language particulars (favor open source? don't like compiled? etc.)
b) Dig deep and master that platform
c) Enjoy the increased job opportunity you have with mastery (not casual) of more than one platform.
d) Repeat in 2+ years
At the end of the day, it isn't necessarily CF or even love of it that should decide your course, it is your internal/intrinsic drivers that are directly related to your life situation and your personal goals.
2) Horizontally...
e) project management*
f) systems administration
g) DBA
h) design
i) information architecture
j) technical sales*
*for e and j, consider an MBA for professionals program.
Many developers aren't motivated by doing design, management or sales activities :)
Now as far as "other" skills, one area I am concentrating right now that might be a good idea, especially for someone coming out of the government environment, which I did a couple years back, is focusing on software engineering's body of knowledge and some of the newer methodologies for development. Government for years has been a very waterfall oriented environment, whereas, the rest of the world has been shifting to Agile oriented methodologies. Learning skills like Test Driven Development can set the framework for then delving into deeper to how one design's components and OOP. Learning UML and ways to define requirements aids in overall communication and clarification of ideas. These skills are often either assumed or ignored in government. The contracting organizations will have them because they often have to meet CMM certification, but direct government workers often don't get a chance to pick up these skills because if their training dollars haven't been stripped to the bone, what is left is usually concentrated on direct technologies (like learning Sharepoint), and not the general body of knowledge that provides the basis for all development work.
I hope this adds to the discussion.
@Hal, I agree with you 100%; presentation layer is the most important. Its what the user sees.
[Add Comment] [Subscribe to Comments]