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!
Archived Comments
I have been working w/ ColdFusion for a long, long time. The problem is that as easy as it is to quickly develop real-world web 2.0 applications in CF, for every CF job available, there have to be an even half-dozen .NET jobs.
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.
Here's how my career has proceeded thus far...might be some ideas in here for you that you've not yet considered. Skills in approximate order I learned them and then began using them professionally:
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)
This hits home on something that has been bugging me for quite some time and really came to a head last week. Why in gods name would a person who has been coding ColdFusion for several years, ask if they should "further their knowledge" of ColdFusion and learn more "advanced techniques"??!!
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!
I second the Jedi Master -- learn everything. I'm an independent developer and work with CF (my fav, of course), asp.net (mostly VB, but a wee bit of C#), php (learned in 2008), as well as a fair amount of javascript and xml/xslt work. Oh yeah, and SQL Server and mySQL. I've done Business Analyst, do Information Architecture and was also a project manager in one phase, so the more you know the more useful you are.
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.
John, you have shamed me. While I think I answered Asoka's original question enough, I really should have brought up the community aspect. I think you are dead on about getting involved. Just _subscribing_ to cf-talk is a start. I would not recommend reading every msg, but seeing the 'pulse' of the conversations can really give you an idea of what is going on in the CF-world. Ditto for ColdFusionBloggers.org. Don't read every post, scan it and see what is up. Just doing that actually puts you in the minority compared to most developers.
Great comment John!
@Ray Complemented by The Master?! I'm printing this and putting it up on the fridge! ;-)
Also, consider attending "IRL" stuff: CFUG meetings and CF Conferences. I really hope to attend cfunited.com this year!
@Craig - I disagree with you. I don't believe I said learn everything. I simply said that it makes sense to both advance your skills in CF (especially since it could 'port' well) and learn another language. But I'd be careful about doing too much at once!
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.
I'd suggest learning a variety of languages, those specific to web development, and those that are more generic. Web specific would include javascript, Flex, and frameworks in general. Generic languages are those that can be used in many areas. Java, Python, Ruby, Groovy, etc.
The problem with techies is that they generally only care to learn more about what they're already doing.
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.
I've been a CF programmer for the past 10 years. A little over 14 months ago, I decided to leave my employer of 8 years. I feared finding a CF job would be challenging. However, I got numerous offers within the first 2 weeks, and still receive contacts on a almost weekly basis, even though I'm no longer looking. The key, at least for me, was never limiting myself to just CF. Learn everything you can that's relevant to your craft. My company wanted to migrate to PHP, so I became proficient in PHP. We switched from SQL Server to MySQL, you got it, I switched along with them. Knowing ColdFusion is only a portion of what makes you a valuable ColdFusion programmer. You need to understand all the aspects of being a web developer, in order to move more easily from role to role within your company or other companies. You need to understand the business logic, how the applications you build interact with users (internal and external) and with other applications. These are the skills that make you valuable to an organization.
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.
Bearing in mind that free advice is generally worth what you pay for it, I would recommend that you augment your skills not by learning another server language, but THE client one, JavaScript.
@Hal, I agree w/ you (which should make you nervous, as it seems NOBODY here has agreed w/ me yet :), if you're not fluent (or at least very comfortable) with Javascript, that would be my suggestion for the next career goal.
I believe that continuing down the path of what you know is very god because it allows you to strengthen knowledge you already have. I also feel it is important to learn complimentary technologies that offer avenues of their own. I have worked with PHP and ASP in the past but found that by sticking with CF, which I enjoy a lot more, I was able to get more satisfaction from my work. However, by adding Flex, Java (learning!), LiveCycle and other technologies to my skillset it opened up a whole new avenue of opportunities and also allowed me to leverage skills I already had.
In other words, learning is never a bad thing, but I always recommend learning things which help you expand what you already know.
I can't overstate the need for people to really gain a strong and deep understanding of SQL. SQL knowledge is something that will apply to virtually ANY web development project, and my view is that most people still have a very basic understanding in this essential area. Not a week seems to go by that I don't have someone ask a question about dealing with data, and their code involves a query, then a loop over the query to run additional queries or to perform some basic manipulation of the data. Any time you ever see this, know that it is almost guaranteed that it's being done incorrectly (or, rather, very inefficeintly). 99% of these types of tasks can be solved directly in SQL if you know how. So take the time to learn how. It's a skill that will carry over to any language and any project.
Just to offer a place to being, "SQL for Smarties" is an indispensable resource for learning advanced SQL: http://www.amazon.com/Joe-C...
Just a quick thank you for the comments - especially considering it's the weekend. I appreciate it.
@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. ;)
At my company, we have our own dedicated DBAs, but due to just about *every* IT department needing them to write their SQL statements for them, I've found that the CF developers tend to write our own SQL, then have the DBAs "review our work" afterwards :) Just like being back in school. So it still certainly pays to be able to write your SQL statements (thus making yourself my indispensable).
The one thing I’d say is take a position, or direction, that gets you away from “coding” as your primary (or only) function. If someone is handing you a set of requirements and saying “code this”, you are a commodity, and there’s no reason why that person can’t say “code this” to someone half a world away, costing a quarter of the price.
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
I think I would have been tougher on the person asking the original question. His post sounded a little desperate.
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.
While staying within development, you can increase your knowledge and skills in at least two ways:
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.
Wish I had the time to learn more new things. I barely have the time to do the things I need to do. 2.5 years now of not having replaced the two CF guys who left when our old manager retired is getting a bit old.
@ Calvin, I'd add to that:
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.
I don't disagree with your list John, though I would point at that those seem to fit Vertical (e.g. solves problems that aren't solved by ColdFusion) and many are non-development (pm, sales, design, etc.).
Many developers aren't motivated by doing design, management or sales activities :)
While learning additional programming and framework skills are important, there are also additional skills that are equally important. While many of us may not have the communication eloquence of Ray and others, one skill to always brush up on and improve is communications (writing, speaking, presenting, etc.). No matter where you are in the software development world, you will often need to rely on good communications skills. You will need to interact with customers, you will need to possibly provide "sales" pitches on where you think an organization should move, you will need to communicate with your peers, and sometimes forgotten, if you have a family, you need to be involved and communicate with them, regularly and often. The so-called "soft" skills can often make a big difference throughout life and can't be forgotten.
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.
ColdFusion seems to me the ideal server-side programming language to use with jQuery. And jQuery seems to have the potential to rewrite web development as we know it.
I have a tool box. There are many tools in there; hammer, screwdriver(various sizes), pliers (various sizes), chisels, socket wrenches(many, many). You get the idea; now think programming languages and versions. I may use a single tool for a job, or many. The trick is to know what the best tools is for a job. More tools I know better for me. Coldfusion,Php,ASP, Javascript...all tools. Have many tools and know how to use each one, so you can build or fix many things for different people.
@Hal, I agree with you 100%; presentation layer is the most important. Its what the user sees.
Language and Framework enthusiasts would possibly disagree, but in the big picture of a career, the choice of a framework or a language, is not likely to make a big difference. That said, if learning a particular framework, or language is important to a particular client or business alliance, then doing so may be the most significant decision in your career. The great thing about being a front-line software developer is that the work focus is seldom static like that. More enduring will be people and business skills. I have seen opportunities lost because of poor performance on the "soft stuff" like people and business, much more than due to lack of technical abilities. The willingness to dive in and learn whatever it is that might serve the customer is the thing you already possess.
Good luck, and enjoy,
Howard