• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Tim Cooke
  • Ron McLeod
  • Jeanne Boyarsky
  • Paul Clapham
Sheriffs:
  • Liutauras Vilda
  • Henry Wong
  • Devaka Cooray
Saloon Keepers:
  • Tim Moores
  • Stephan van Hulst
  • Tim Holloway
  • Al Hobbs
  • Carey Brown
Bartenders:
  • Piet Souris
  • Mikalai Zaikin
  • Himai Minh

Java Architect skill: Is C mandatory ?

 
Greenhorn
Posts: 12
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi All,

I am in solutions architect path and planning to move up in the ladder. When I discuss my interest with my mentor @ office, he is also suggesting me to learn C . I have started learning Java in my career and advice now is that knowing C will make us
better architect/programmer in terms of understanding the internals of memory, performance, data structures and algorithms etc .


I have been involved in performance tuning in Java and I learnt a lot during that course. I did not know C so no idea on how to intercept the advise here.

Now at this point in time (Having 13+ yrs of experience), would it be advisable to know C in addition to being in Java world and if yes, to what level I should learn and try out in C ?

Please advise me on this.

 
Sheriff
Posts: 67650
173
Mac Mac OS X IntelliJ IDE jQuery TypeScript Java iOS
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
If you have been in the industry 13 years and only know Java, then yes, it is long long overdue for you to be learning other languages. Whether it's C or not is another question. But relying upon just one language is a big problem.
 
Shankar Ramanathan
Greenhorn
Posts: 12
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Got it Bibeault. In this case should C be a good choice to understand and explore ?
 
Bear Bibeault
Sheriff
Posts: 67650
173
Mac Mac OS X IntelliJ IDE jQuery TypeScript Java iOS
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
As good as any other, shrug. You'll certainly learn about managing memory.
 
Marshal
Posts: 27275
87
Eclipse IDE Firefox Browser MySQL Database
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I'm not sure what a "solutions architect" is responsible for in your environment, but... In most cases an "architect" is responsible for the large-scale attributes of a design. Such as, what kind of a database will be used, whether one or more web or application servers will be deployed, how the application will be protected against various kinds of failure, and so on. The responsibility for deciding what kind of sort algorithm to use, or whether to just use whatever is the default, is commonly assigned to somebody at a lower level. So I don't see how knowledge of the C language would help an architect according to this description. On the contrary, thinking about the sort of things that C does is likely to get the architect involved in micro-managing things which are better left to somebody else or even things which are better left alone.
 
Shankar Ramanathan
Greenhorn
Posts: 12
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Paul,

Thanks and I agree with you on the Architect role. Role is similar in here and the advise that I get from my mentor is that knowing C will help an architect in understanding memory management and that helps in performance tuning too. So bit confused. So if I learn C should it only be for these understanding ?
 
Paul Clapham
Marshal
Posts: 27275
87
Eclipse IDE Firefox Browser MySQL Database
  • Likes 1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Personally I'm not even sure that C helps you to learn about "memory management" -- and I'm not even sure what's meant by that, or (as I said) why an architect should be concerning themselves with such things. After all I was a programmer and designer (and did my share of architect-like work) for 40 years without ever learning C. Likewise I don't see why knowing C should help in performance tuning, unless you're going to be tuning code which was written in C perhaps. People have written entire books on how to do performance tuning for Java code, for example, without ever having to use C code to explain the process.
 
author
Posts: 23923
142
jQuery Eclipse IDE Firefox Browser VI Editor C++ Chrome Java Linux Windows
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Paul Clapham wrote:Personally I'm not even sure that C helps you to learn about "memory management" -- and I'm not even sure what's meant by that, or (as I said) why an architect should be concerning themselves with such things.



Well, I think C will help with "learning" memory management, by desperation...

Java programmers tend to do things that is a "no-no" in C -- such as creating an object and returning it. In C, the idea of malloc'ing memory, to be returned, and not having control of freeing that memory, is really not done. C programmers is responsible for allocating and freeing memory, and it is generally done in a balanced manner. The idea of allocating memory, and freeing it "whenever it is no longer needed" is just too complicated a concept for a developer to deal with.

Now, of course, you can argue that these are not "memory management" skills, or perhaps skills that are not really useful in Java. And perhaps you are correct. On the other hand, by taking responsibility of allocation and freeing, you tend to think about it some more, and it does "help" with designing "zero copy" algorithms -- which tend to not generate objects, need less (or sometimes no) garbage collection, and hence, behave in a more consistent manner.

Henry
 
Bartender
Posts: 1210
25
Android Python PHP C++ Java Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
If you go through Brendan Gregg's blog on performance tuning (he's an engineer at Netflix and has written excellent books on the subject), one thing you realize is that bottlenecks in a Java system are sometimes due to the underlying JVM implementation (which is usually in C/C++) and native layers underneath, such as libc, the linux kernel, etc (again, all are C components).

A java performance tuning engineer who doesn't know C at all will probably misdiagnose some performance problems because they don't understand the underlying layers.

In my opinion, you should understand the native layers, and learning a little C and kernel internals - atleast the high level basics like malloc/free/tcmalloc/pthreads/sockets/synchronization/ulimits - is part of that understanding. Instead of starting from scratch with the C language syntax, perhaps you can start top down by using native performance analysis tools along with JVM perf analysis tools (follow Gregg's blog for info on them) and whenever you come across something incomprehensible in the native layers, do more research on that specific topic.

Besides that specific reason, in general, if somebody asks me should I learn "x", I always say yes. Because my career credo is the T-shaped professional. Never hurts to have some breadth. Of course, that's a personal credo and not everybody may agree.
 
Rancher
Posts: 2759
32
Eclipse IDE Spring Tomcat Server
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Shankara,

A bit of a clarification. You said you are a "solutions architect", and you are learning Java and your mentor told you to learn C. What's your background? Do you come from an IT admin background? Or do you come from a programming background? What's your expertise in? What did you do for 13 years before moving up the architect ladder

You have to remember that most people here are from a programming background, and when they hear the word "architect", they think "programmer with lots of experience".

Learning C is never a bad thing. C is the closest you can come to learning how applications use the underlying hardware and OS. C is the mother of C++, which is the mother of all the OOP languages in use now. However, learning C is also very costly in terms of your own time and effort. Out of the languages in popular use out there, C is the hardest to learn. I would say, "learn C, but dont's kill yourself". If you find yourself getting stuck, move on.

Java, C# and python are the 3 most popular languages in use now. If you are going to be working with developers, you are likely to be talking to people who speak one of these 3 languages

Functional languages like Haskell, Scala, Clojure are up and coming. It;s entirely possible that one of them will be popular 15 years from now. If time permits, you might want to learn Haskell. Haskell is the purest functional language out there, and is a good way of exposing yourself to functional concepts.
 
Shankar Ramanathan
Greenhorn
Posts: 12
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks all for proving your clear thoughts so far. Certainly it will help me to proceed with my plan.

@ Jayesh. Thanks for your comments and clearly got your points on effort required and also to focus on the functional programming languages. I thought of taking Scala course in Coursera many times. Somehow I did not make it due to time constraints and at times my laziness. Coming back to your initial points, Yes I am a solutions architect (Java - j2ee based applications) and from programming background. Started my career in Java and so far, all of my experience is based on Java technologies and at times shell scripting, PLSQL programming etc.





 
We're being followed by intergalactic spies! Quick! Take this tiny ad!
Free, earth friendly heat - from the CodeRanch trailboss
https://www.kickstarter.com/projects/paulwheaton/free-heat
reply
    Bookmark Topic Watch Topic
  • New Topic