HN user

fiveo

111 karma
Posts0
Comments56
View on HN
No posts found.

I think people downvote you because the topic is about programming language, not human language.

I have to agree with you though, knowing English and Mandarin are better (at least for me) than knowing programming languages.

The thing about Java developer is that they're getting easier to be replaced (outsource or offshore).

That might not be the case if you're specialized in SAP (ABAP, FICO, ERP), Oracle (PeopleSoft, CRM, Financial). Sometime it is due to the nature of the information you're dealing with.

I'm on a similar boat.

I decided to quit pursuing technical excellence and heavily thinking to switch career to either DBA (I've been taking database courses at a local polytechnic college) or Sys/Net-Admin. More of the "Ops" kind of career for many good reasons.

I realized that what I like is to build software from a non-programming perspective (architect, designer, owner). So I decided to look for a lucrative yet stable career, save my money for the long run, and outsource programming jobs.

I know people have distaste with the word "outsource". But outsource doesn't necessarily mean to India. It could also mean to contract out part of the programming jobs to a local talent. I also have the advantage of being born on the other side of the world (somewhere in SE Asia) so I have 2 talent pools to choose from.

I viewed my moves as a series of problem solving steps. Perhaps you should too.

What about ASP.NET, ASP.NET 1.1, ASP.NET 2.0, ASP.NET AJAX, and now ASP.NET MVC + varieties of view engine?

What about WinForms, WPF, Silverlight?

I think this is the biggest difference between programming language and OS/RBDMS. The changes happening around programming languages are much faster than that of the OS/RDBMS world.

People who know UNIX concepts are most likely employable whether the business is using HP-UX, Solaris, Linux, or BSD. You're a DBA? doesn't matter much how many years of experience you have between Oracle and SQL-Server (as long as each have at least 1 year).

Compare that to a developer who know OOP in Java and JEE is less likely employable in shops that use the equivalent technology in C#.NET (even if the concept and the language is the same).

My point here is that the changes in programming language/development tools are in a very unhealthy situation. People don't even have time to stabilize and learn other skills (communication, organization, networking, understanding business needs).

I think the term 'generalist' here is a bit unknown.

If you're a developer working on web-based software, you are known as the web-developer guy (specialist).

If you're a developer working on transactional, security, concurrency, you are known as the back-end guy (specialist).

If you're a developer working on business-app, you are known as the enterprise developer (specialist).

If you're working on product-based company developing virtualization, you're specializing.

Developer who work at Google, while they might not used the varieties of framework out there, are specializing in Algorithms, Data Structure, Concurrency, and Large Scale development.

If you're looking for work as an internal business-app developer writing JEE components, your recruiter might not want to accept Algorithm geniuses who used to work at Google.

A Rails guy will look down on someone who has 7 years of Java experience whom tries to escape Java at the same time but wouldn't say something bad about his work experiences (not burning bridges).

These days people shaped their mind and view pretty quick.

Silicon Valley wants the best and brightest. This filter is opinionated based on the company.

If you're looking for work at VMWare, your Rails and MongoDB experience won't be needed. They want C/C++ guy who can hack Linux kernel or write device driver.

If you're looking for work at Facebook, they want someone who knows PHP and C/C++ and probably have provided patches to MySQL or memcached. Or they grab "idea" people like Lars (from Google).

You should also "own" that domain (compiler, AI, optimization, OS/Kernel, Networking, DB/Data-Mining, business-app, ERP/CRM/Enterprise).

This is scary because it forces you to: 1) Put your eggs in one basket: domain

2) And put more eggs in another basket: technology

3) Stay up with the latest in (1) and (2)

This left you no room to breathe. To break this cycle you probably have to get out there and do something on your own (meaning: your own business/company)

While I do enjoy programming, I don't think software development is a good industry to have a career in. The market is so fragmented right now with different choices of programming languages and different technology requirements. And you are expected to be the expert on those technologies.

I like what I do and it's good to be paid at what you do. But these days corporations want their people to work extra hard and dedicate themselves for the company. Once the company is done with you, they'll spit you out.

I've had my first-hand experience seeing someone who helped built the company, loved his job, work harder than anyone else in the company, was being let-go when the company didn't do well. Probably because he has a high salary than anyone else. The least the company could do is to negotiate his salary and let go someone else (still not ideal, but then..).

Long gone is the day of "employee growth", "personal advancement", or "continuous improvement". Enter the day of "you should already know that", "study this on your free time".

With the rise of Scrum and XP, developers are becoming interchangeable (outsource, offshore, or between colleagues).

Agile is such a generalization. There are many practices below Agile such as Scrum, XP, Lean, Kanban, DSDM, FDD, etc.

Agile itself is just a set of principles. The actual implementation still require some processes.

I don't think people should attack Agile as a whole, but they should focus on which practices they chose. For example: Scrum is an agile practice for Project Management. But in order for a shop to use Scrum, they must implement certain practices from XP. XP more of an agile practice for Software Developers.

There are shops which implement only SCRUM but not the XP part. That is to say that they implement the whole Sprint, Retrospectives, Backlog, Stand-up meeting, but they did not refactor bad code, they did not try their best to have an automation in place. At the end of each sprint, they never test the whole app, they only test whatever the sprint accomplished. This is even worse than the previous practice.

I wholeheartedly agree with those who have been burned by management who thinks that SCRUM or XP will make things better in a short time. I hate to say this but it takes a very long time for a company to change their culture and mindset (depending on the size of the company and what the company does: product vs service).

If your company is switching to something new, make sure they know that methodology inside out. Make sure they met the pre-requisite. Make sure they are willing to sacrifice their time and money for a while.

Otherwise, get your resume ready cause the ship will sink faster than before.

On the other hand, some people might not agree with this but when you have one of these processes in place and everything in your engineering department runs well, that doesn't mean life is good. When the company is not doing well, your senior engineers who receive a big-fat check every month might be a good candidate to be let go. The reason is because your intermediate and junior engineers have already known everything inside out (cause one of the practice in Agile is to share knowledge, cross-functional team, or whatever).

Be aware that it could be a double-edged sword.

I don't mind occasional OT (with compensation). Fact is, in where I live, companies can get away with lots of OT and not compensating them. I don't mind to go to management position late in my career. Not now, but maybe later.

Interesting things can have different means. To me, Google architecture (GFS, BigTable, MapReduce) are all interesting, but I have no desire to learn them for the sake of learning. Rails is interesting in the sense that I'd like to learn it, make a website using it, and take a poke at running a small business.

I'm also interested at the business of iPhone apps. I'd rather pay someone else to write the app than writing it myself. I prefer to focus on the operational side: making sure we have a website with good SEO and graphics design. Promote the iPhone apps and start making money (even with a low profitability margin).

But at the same time, I'm not a big gambler or a risk taker. Steady fixed income and experimental on the side is my sweet spot.

In short, I'd like to be able to run my own side business, be it iPhone apps or selling stuff online. That excites me more vs toying with various programming languages or solving hard algorithm problems. I prefer to talk with people than with machines. I don't mind to do occasional programming cause I like to build stuff. I just don't want them to dominate my whole life. I prefer not to be 40 or 50 and still hacking C, UNIX, Java, C# or Ruby for a living.

There's some amount of problem solving and planning involved. But not as challenging as to implement the next distributed storage mechanism. I'm probably closer to done for that world. I'm not a research scientist.

I'm looking at the specific area: financial services (not trading, but more traditional than that: transactions, accounting, etc). I'd love to learn about finances more in conjunction with doing IT related work.

I understand and well aware of that. Having said that, I also often see companies purchase Oracle for technical and business reason. I went and saw myself first hand experience a multi-financial company that opted for Oracle (as opposed to SQL-Server, which they benchmarked) to build their financial system and they are pleased with that.

No argument between TDD, BDD, DDD, C# vs Java, Linux vs Windows, Commercial vs FOSS and all that crap. Just Oracle, PL/SQL, Forms, and Oracle Financial. There's no Java code at all around there. Pure "module" based. Testing is a lot easier vs to test your own "financial" module written in JEE.

I see it as more practical and suits the business well.

Of course if the business requires infinite customization (in the case of that crazy idea called Business Process Redesign), then maybe hiring a team of software developer is better than buying Oracle.

I do wonder what "discipline" means. Cause it often depends on what the CEO wants.

For me, as a software developer, discipline means TDD, repeatable process to write code (no, it doesn't mean we should throw-away creativity).

Thank you for your response and to share your experience as well. Greatly appreciate it. It would be great if I could have some stability in my career and yet still able to work on something else (be it RoR or LISP or something else).

<rant> I've been working in a few, of what people would call "software product", companies. The one that Joel mentioned a lot in his essay.

First of all, if I were in Silicon Valley, I wouldn't probably even think of Oracle. I would hone my CS skill so bad that I could hack my own compiler. Alas, I don't live there. Even if I do, I have an expiration date stamped on my head: good only for 10 years after graduation. Silicon Valley wants hot-shot, young, energetic, red-bull-drinker, all-nighters type of programmer. So if I can't be a "product manager" or "CTO" or management material by the time I'm 32-35 years old, time to get out from SV.

Product based company tend to be unstable in where I live. I also noticed this trend isn't particular to where I live, it's everywhere else too. When the product is not selling well, lay-off happens. The first to go are usually the QAs.

Once the QAs are gone, the next one to go are the "internal" tools developers: these are the ITs and the tool developers. The last one to go are the junior developers and weak performers. The ones who left must work super hard to prove that their worth of their salary.

Product based company is cool during their first 3 years. After that, it's all maintenance of legacy and hacked-up code. I don't know which one is worse: maintaining half-ass, hacked-up, badly designed product with tight-deadline (that usually leads to OTs) or writing PL/SQL or customizing Oracle modules.

Here's another problem: standards, scrum, xp. These are great things to have in a software product house for quality and longevity of the company. But at the same time, they are a double-edged sword.

Let me explain why: once the standards are in place, most people are replaceable. Take Scrum/XP for example. One of their important points is that we all should share knowledge (via Pair Programming, or something else).

They want to make the unknown to become lesser unknown or to be known. Once it is repeatable and known, you have no value anymore to the company. Intermediate becomes Senior, Junior becomes Intermediate, and you're being let-go and they will start to hire new people.

The choice is either to move up to management or not to do scrum/xp (which is equally horrific). Not doing scrum/xp would lead to bad result, bad quality, unhealthy working environment, and the need of a hero-like effort to fix some bugs.

I have seen my friends keep changing job within 2-3 years. That might be okay with them but not with me. I don't like to waste my time preparing for interviews, cleaning up my resume, every 2-3 years. I don't mind learning and improving myself, but not for the sake of that kind of cycle.

Here's another problem with software development: programming languages. Too freaking many of them. People have too many opinions. Some like LISP, some like Java, some swear by .NET, some would invent a company based on F#, some deal with Struts1/2, some would want PHP/Drupal/Wordpress. This leads to a very fragmented field.

I rarely see a company that is looking for the bare minimum (say, Java, or C#, or Ruby) but with X-years of experience. I often see companies looking for specifics (must know Java, Struts, XML, XQuery, XPath, XSLT with 7 years of experience).

I thought about doing Rails and iPhone for a while until a couple days ago where it hits me that you can actually outsource iPhone app development. Those 2 guys that were being interviewed by Mixergy did exactly that.

I also see a few consulting offers lingering in a local job-board looking for an iPhone/Android developer. But most of them are unstable due to the nature of consulting. I don't think they're willing to pay the premium ($100-$125) anyway.

Some consultants might be able to charge premium during the first few years of a new technology (like iPhone), but they need to find the next big-thing again every 2 years.

The point is this: low entry barrier sucks.

When I look at Oracle, the barrier to enter is a bit higher (or so it seems) than being a developer and not too many people want to do the job. It's a niche. Just like what one of the HN-ers mentioned about how he did quite well with his freelancing/consulting gig (he's doing PHP, Drupal, and Wordpress) </rant>

Would you mind to explain further? What kind of Oracle tasks you do on day to day base?

The reason I asked this is because I've been in a few software product shop and they all unstable. I guess I'm on the other side of the bridge.

But thank you for the warning though. I should explore further before I make the leap.

I'm actually flirting to move to everything Oracle for my career (seriously). There's a big money and (hopefully) less work for those who know how to use 10% of Oracle's other software aside from their database.

Now I can go home by 5 and have a side project/job on the evening and weekend using Emacs, Ruby, Rails, and jQuery.

I'll be set for the next 10 years!

Since I cannot edit my original comment (no idea why), I'd put my update here:

Looks like the people that replied my post got into deep technical discussion without mentioning a startup in the scale of Twitter. Exactly like what the author pointed on: no successful product yet.

I hope people can see a pattern here: Twitter: FlockDB, and varieties of supporting infrastructure Facebook: Cassandra and in-house tools Google : GFS, BigTable, and in-house tools LinkedIn: Voldermort + varieties of supporting tools

Each successful startup build NoSQL solution based their own needs.

Better make sure your needs align with them sir.

RDBMS does require a bit of planning (not too much, and not too rigid) and previous experiences building good data model; both traits don't exist in hotshot hackers/startups these days because they either don't have the patience or much deeper experience.

Hmm, Twitter is really big in using Scala.

The important message is this: "focus on the process to build a great company and great products... They didn’t become successful because they built these systems. They built these systems because they became successful."

The next unproven startup that uses NoSQL solution is just wasting their time. I know this because that happened to one of my previous workplaces (we use HBase).

There are programmers like this today. They can install Windows and MS Office but once something more complex happened in their Workstation at the office, they'll call Sys Admin to fix it for them.

It's a mix of laziness and doesn't want to know more outside VB/C#. It's for an excuse to get a coffee break, a smoke break, or something else.

vancouver WA (US) or vancouver BC (Canada).

Anyway, forget about them both, there's nothing in those cities. Vancouver BC has lots of small (but weird) "social media" startups that probably died within 2-3 years.

Lots of "online gaming" (I mean gambling) companies.

All talents either move south of the border or to the East.

We have 3 good schools: UBC, SFU, and UVic.

Lots of people who want to enjoy life.

I don't mean to be negative but it is what it is.

Yeah, EA Vancouver/Burnaby is one of those "satellite" branches: when there's a problem, they get to experience first-hand on what downsizing means. Wouldn't count as the best bet since aside from OT there are big possibilities of massive lay-offs.

I'd take entry-level Java boilerplate code at any given day than a Microsoft boilerplate code (which is what Vancouver has to offer these days, especially with the government around here). Vancouver salary is also between 20-30% less than to that in Toronto.

And lately, since all the fun lies in Asia, I can't wait to go there. Vancouver becomes boring (and gray) to me. Especially with the 10 months of rain.

Oh where do I start with this one hehehe.

SR&ED: I've said this before and I'm going to say this once again. It attracts fishy investors, clueless businessmen, lame business models (clone of X social networking site), and a sense of false success.

Immigrants: no, it's not their fault. But they're trying to survive. So when everyone is trying to survive, basic needs must be fulfilled first (food, house, clothes).

Supply > Demand in HR: People want to move to Vancouver (even people from the East Coast) to enjoy life. But the demand of jobs aren't that many. So you get people from everywhere who probably have 10 years of experience coming to Vancouver.

Supply > Demand in Products: Not too many people are willing to buy software or services. Probably because they don't care or they don't need it or because they want to save money to survive (immigrants).

Enjoy Life: Laziness. Get it done by 5, I want to go skiing/fishing/hiking. Forget unit-test.

Government Oriented: They rule around here. You know how it is with the government contracts and deals and whatnot. Man, even Government own and run online gambling website (http://www.playnow.com)

As you've said it before: disreputable gaming industry. Tons of online gambling companies based in Vancouver. I don't see the rate to go down at anytime soon, especially when our municipal just open its own. (see above).

Politics: due to fierce competition (survival) and/or laziness, politics is all time high. Ability to get things done go down significantly. Guess what's the hottest job in Vancouver? Business Analyst. Guess what they do (mostly)?

All these things created an unhealthy cycle. Suddenly people don't want to be an engineer or a developer. They all want to go to the managerial position.

One other choice is to move East to Toronto. There's better chance there, albeit not superb, but still way better than the West coast.

I second to you. In Vancouver, I've seen many companies who have probably live as long as 3-5 years before they crashed and closed down permanently.

Most of the issues are related to their inability to innovate and their use of old technology (and methodology).

I don't mean to be rude but sometime I viewed Canadian technology companies as the western-but-India-in-the-past kind of company.

Many companies in Vancouver is looking for 7-10 years experienced (enterprise) Java developers. Gone is the need of fresh-grad/junior developers position.

Guess what the fresh-grads do?

1) Go back to Asia (most immigrants came from Asia)

2) Go south of the border to Google, Microsoft, or Amazon.

The cycle breaks down there. Tough really.

I've been here for almost 10 years since college and I'm starting to plan my move to south of the border or to Asia.