Career question

Tenks

Bronze Knight of the Realm
14,163
606
So I find myself in a situation.

My company's main service we provide is a massive database. We offer various subscribers various products that interface to this database. I have been hand-picked to go on a team that is the search service for said database. So basically every product my company makes will, in some way, interface with this product.

The problem: the current service is written in C. I do not know C very well. I took C 101 in college and that is about it. I would have to work on this platform for at least a little while.

The future: apparently there is a searching paradigm coming where you use MapReduce, in some fashion, to do large scale searching. My company has recently moved over from using a RDBMS Oracle database (~8b items) over to using Hbase as our master copy. I will be on the team writing the new service that interfaces using MapReduce overtop Hbase.

My current gig is pretty decent. It has good visibility in the company but unfortunantely despite me doing all the real-world implementation architecture for the service there is an official "architect" that has no qualms with saying he designed the entire thing. When in reality he just wrote some giant boxes on the whiteboard that anyone with a brain would have derived we need to create. I was the one actually in charge of filling in those boxes. So I feel like my actual contribution isn't widely known but it is fairly well known in the company I am an expert in MapReduce and Hbase. Currently I have been charged with working directly underneath the architect to move a database my current project relies upon into Hbase and coming up with the key/qualifier structure and how the Scans and MapReduce runs against the data. This isn't a huge database and will only be like 25M rows or so. But I know the actual architect will take full credit for whatever it is we eventually come up with.

The move over to the other team would also come with a promotion. That isn't huge since I am just a "Software Engineer" and I'd move into a Senior Software role. It comes with ~15-20% pay raise. But I'm reluctant because I have always been a Java programmer. Every job I've held has been Java and OOPD. I don't know C, I don't know manual memory management, I don't know pointers. None of it. I don't think I couldn't pick it up but I'm concerned with how long it'll take me to pick it up until the service actually moves into MapReduce when I'll be in my realm of expertise. However if I stay on my current role I should see a promotion in about a year or so.

Any thoughts on what I should do? I know without knowing specifics it is really hard to say but has anyone been in a similar situation?
 

Jorren

Maximum Derek
<Bronze Donator>
1,429
1,337
Not sure where you live or what the job market is there. Going from programming Java to programming C is a huge step backward IMO. It may be nifty to have, but Java is in high demand. If they were asking you to do C#, that would be a different thing. Going back and forth from Java and C# is easy stuff.

Now if they want you to convert the C code to Java (you might suggest as much) then you may be on to something, and potentially become a company hero with the Code Convert Champion achievement earned
tongue.png


That all said, I would stick it out and stay with Java, get the raise in a year and carry on. Architects be Architects don't sweat that. Time served = Experience. Work it right and you can gain your own visibility. If it goes lopsided, you can always find work coding Java elsewhere.
 

Deathwing

<Bronze Donator>
16,395
7,396
Oh man, pointers and memory management are fun!

C has some performance benefits over Java, which maybe why this database was written in that language, but I doubt it. Probably just something carried over. As Jorren suggested, you could make it your project to update to a more recent language.

My previous job was Java and I'm essentially working in C now. You get used to it, especially after learning to read flattened arrays quickly, and there's definitely some stuff I learned from working with C that I never would have picked up in Java. I miss Java's standardized documentation the most.
 

Tenks

Bronze Knight of the Realm
14,163
606
Maybe I didn't explain well enough. Basically I'd have to write to the C project for maybe a year. Our current search engine is written in that. The next project on the docket for the team, however, is to use a new search engine paradigm using Hadoop which is why I'm being targeted for the job.
 

CnCGOD_sl

shitlord
151
0
Hadoop (MapReduce, Hbase, Hive, Flume, etc) are fucking gold on your resume. The short term promotion might not be worth it if you are already working with Hadoop/Hbase as C isn't that marketable long term. Don't worry about credit per say as it is more about your career experience in general.
 

Tenks

Bronze Knight of the Realm
14,163
606
Hadoop (MapReduce, Hbase, Hive, Flume, etc) are fucking gold on your resume. The short term promotion might not be worth it if you are already working with Hadoop/Hbase as C isn't that marketable long term. Don't worry about credit per say as it is more about your career experience in general.
The move over to the new job would put me more in the trenches with the HBase/Hadoop team at my company. I would sit in the same area and would technically be on the Hbase/Hadoop team even if I wouldn't be directly in charge of managing the cluster. At my current job I'm more someone who implements MapReduce to business rules. It is really interesting and it puts me down on the implementation level of writing mappers, reducers, partitioners, comparators and learning the paradigm of implementing rules in a Map then Reduce fashion. But it doesn't expose me very much to the ecosystem since that is abstracted away from me being more of a "client" of the cluster if you will.

But yeah I'm really not looking forward to doing any work in C and that is what is really making me apprehensive.
 

CnCGOD_sl

shitlord
151
0
Yep, I understand the concern of being a client. You want to be in the weeds not interacting through APIs etc. I sent you a PM on a related matter.
 
1,268
18
Just wondering, but the entire project must be "pure C" and C++ is absolutely not allowed? You can write C++ very much like Java and never have to manually manage any memory at all (strings, vectors, maps, etc.). If I was managing a C++ project today aimed at PC, the keywords 'new', 'delete', 'malloc' , etc. would be forbidden to use by anyone without special permission and absolute need. I've spent too many hours cleaning up memory leaks of people that have been in the industry 10+ years.
 

Tenks

Bronze Knight of the Realm
14,163
606
I honestly don't know enough about the C/C++ world. I'd imagine they aren't opposed to C++ and I'm getting my information second-hand so I don't know if it is C or C++. I don't know if you can easily just "drop in" C++ into a C project.
 

Tenks

Bronze Knight of the Realm
14,163
606
The issue is there are far, far more Java programmer positions to fill than C programmer positions. Sure since it is a specialized skill set these days they can make good money but if they lose their job a replacement one isn't quite so readily accessible.
 

Noodleface

A Mod Real Quick
37,961
14,508
I honestly don't know enough about the C/C++ world. I'd imagine they aren't opposed to C++ and I'm getting my information second-hand so I don't know if it is C or C++. I don't know if you can easily just "drop in" C++ into a C project.
There's some nuances and it really depends on the project. I'm sure for some projects you could just straight drop it in, while for others it would require quite a bit of porting code.
 

Deathwing

<Bronze Donator>
16,395
7,396
C/C++'s main problem(compared to Java) is unification, for lack of a better word. You code Java? It works the same pretty much everywhere. Compiler to compiler, platform to platform. I'm generalizing here, I'm sure someone could point out some exceptions.

C across platforms and compilers is a fucking mess. I do most of my coding in Borland 6(don't ask), let me give you an example.

if(a - b < c)
do something;

Unless you put parentheses around a - b, Borland 6 will compare b < c first. Visual Studio will do the subtraction first. Fucked up thing is that Borland is technically correct. So, unless you code in ANSI C, you'll find these little discrepancies everywhere.


I've kept this thread in mind as I've worked the last week. Astral's comments are very accurate. You leave out memory management, C++ is similar to Java.
 

Tenks

Bronze Knight of the Realm
14,163
606
Well the question is moot. I'm getting promoted while staying on my current team. They didn't want me leaving my team since they recognized I'm basically the architect of the system. Thanks for the input though guys.
 

CnCGOD_sl

shitlord
151
0
C++ is one of those languages that when used properly is 100% superior in terms of performance and capability to Java. The downside is the barrier of entry for "properly" is MUCH higher than Java. Sure there are tons of bad Java programmers out there but imagine what those people would do to C++?

I agree with the big fish in small pond, this is even better if the skill is newer...
 

Vilgan_sl

shitlord
259
1
C++ seems better from a performance standpoint. However, that tends to be irrelevant most of the time compared to dev cost and dev cost tends to be lower with a language like c# that is good at getting shit done.

Other nice thing about common languages is if you are good at it, it is bloody trivial to find a job wherever you want to live. If you live in a tech hub like Seattle or SF, you can walk out and find a different job very very quickly if you ever become unhappy where you are working now. There are literally hundreds (no hyperbole) of companies hiring devs in the Seattle area. This makes it a lot easier for people to find a good fit rather than working for xyz company because they are the only choice.
 

CnCGOD_sl

shitlord
151
0
Other nice thing about common languages is if you are good at it, it is bloody trivial to find a job wherever you want to live. If you live in a tech hub like Seattle or SF, you can walk out and find a different job very very quickly if you ever become unhappy where you are working now. There are literally hundreds (no hyperbole) of companies hiring devs in the Seattle area. This makes it a lot easier for people to find a good fit rather than working for xyz company because they are the only choice.
Yea I ran into sparsity in the St.Louis market, had to go consulting route to make progress. It works for me however.
 

Running Dog_sl

shitlord
1,199
3
C++ seems better from a performance standpoint. However, that tends to be irrelevant most of the time compared to dev cost and dev cost tends to be lower with a language like c# that is good at getting shit done.

Other nice thing about common languages is if you are good at it, it is bloody trivial to find a job wherever you want to live. If you live in a tech hub like Seattle or SF, you can walk out and find a different job very very quickly if you ever become unhappy where you are working now. There are literally hundreds (no hyperbole) of companies hiring devs in the Seattle area. This makes it a lot easier for people to find a good fit rather than working for xyz company because they are the only choice.
Good advice. I would add that programmers should always make an effort to learn additional languages when the opportunity arises, and that's what the OP has: look on it as an opportunity to advance your skillset, not as a problem. It's especially useful to learn languages that are substantially different from those you know, although many concepts will carry over from one to the other. Don't be too worried about pointers and memory management, it's not rocket science.

For performance comparisons you can always check out:

http://benchmarksgame.alioth.debian....=java&data=u32

...but take the results with more than a few grains of salt.

Finally, C++ will probably open more doors for you than C IMO, if you have a choice of the two.