• 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
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

where to go after learning C language(moderate level)?

 
Ranch Hand
Posts: 55
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I have been learning c for quite long time.I have read and done all the exercises of the books ,I used for learning .Now ,I am thinking about diving in kernal programming rather than leaving it and giving my time to other languages.I think using c for competitive coding is not good choice as the level of abstraction is very low and there are many other brilliant languages out there like c++, java and python. Am I thinking right ? and what are the options other than linux kernal programming that might be better ?
 
Bartender
Posts: 10780
71
Hibernate Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Zohr Ridhan wrote:IAm I thinking right ? and what are the options other than linux kernal programming that might be better?


I don't honestly know, but if kernel programming interests you, I'd say: go for it. It's quite a niche market, and if you can prove you're good at it you can probably earn a fairly decent living doing it.

It also sounds like you've invested quite a bit of time in C, so I wouldn't abandon it simply because there are "greener-looking" languages out there. Assuming you do decide to go with kernel programming, I suggest you concentrate on that until you're comfortable with it, and then look for another language to study once you have the time to spare.

And personally, I'd say that Java might not be a bad choice: It's object-oriented (which is a big thing to "have") and its syntax is similar, which means that it won't look completely different. And if you know both C and Java, you'll have the top two languages by quite a wide margin (at least according to TIOBE).

Don't expect any of this to happen overnight though.

HIH

Winston
 
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
Some other experiments I can think of, where you can use the C knowledge you already have:

- Writing custom modules for the Apache httpd web server

- Understanding the PostgreSQL database. Modification may not be easy, unless you can think up some good mod.

- Understanding the Redis in-memory database. I've come across many devs in other discussion forums opining that this is "the best written" C code they have ever come across.

- And of course the evergreen Quake game souce code

- (Update): Oh, almost forgot, but if you have Windows, you can still program any kind of Windows application - including UI applications - using pure C and the Win32 API. You can also use the GTK library for UI applications on Linux - AFAIK, it's still pure C.

Kernel programming is also good (I assume you mean Linux kernel...I don't know much about other OSes, but perhaps FreeBSD is another good option and I've heard it's newbie friendly, which Linux is most certainly not).
But it also requires you to additionally learn kernel specific idioms and become familiar with kernel specific tools like kernel builds and debugging. Some things that you'd normally use in userspace C programming are not allowed in kernel programming.

As for competitive programming, two of the parameters they use to judge are memory and time. C gives you advantages there over somebody who's using java or python.
 
Zohr Ridhan
Ranch Hand
Posts: 55
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I am not interested in windows app development.
I agree with you on the two points that you mentioned for comp coding but due to the level of abstraction and library deficiency in C ,it takes much more time to write code in c than in other language like C++ and Java (almost double in some programs that i encountered). What are your views on these two points? I am already very much familiar with java, I learned it before C. Actually I am of web development background thats why I am little confused in selecting between linux kernal programming or apache server programming,so that it may help me later in future.
 
Karthik Shiraly
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

due to the level of abstraction and library deficiency in C ,it takes much more time to write code in c than in other language like C++ and Java (almost double in some programs that i encountered)


People participate in competitive programming with different motivations.
Some do so precisely because a lack of libraries means they have to think up solutions using the most fundamental concepts of algos, data structures and computer science.

In fact, some years ago I'd come across a discussion in TopCoder where a top ranker was complaining in the forum that one SRM had allowed the use of libraries. His point was that the spirit of competitive programming was about the best way to structure a logic based on fundamentals, but use of libraries amounted to cheating because part of the logic was already written by someone else.

A very proficient coder can code things from scratch without using libraries. It's a matter of practice and more practice, till the point where parts of it has gone straight into muscle memory.
Being able to stitch programs using libraries is also a skill and much appreciated by employers because it reduces development time. But such a person will also face difficulties when faced with problems where original solutions are required.

am little confused in selecting between linux kernal programming or apache server programming,so that it may help me later in future.


I'm not sure whether your question is from point of view of getting better at competitions, or becoming more employable.
The two are not necessarily the same.
If it's about employment, then kernel programming has a lot more demand than something like apache server programming.
 
Zohr Ridhan
Ranch Hand
Posts: 55
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

person will also face difficulties when faced with problems where original solutions are required

what are those problems and when I will encounter such problem.
My question is from point of view of gaining more weight to my programming knowledge as well as employability and I want to select the one that will help me in my field of full stack web development and programming.
 
Karthik Shiraly
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

Zohr Ridhan wrote:what are those problems and when I will encounter such problem. ...want to select the one...


There are so many unsolved problems that I'm sure if you analyze your own daily usage of technology you will have no difficulties coming up with them.
Some of my problems I can think of:

- Mobile devices nowadays are actually rather powerful multicore computers capable of complex math,
but we still don't have any accurate popular framework that can do voice recognition on the device.
Everything is streamed to some server somewhere for all the processing, and if you are in some remote location
without mobile Internet, that feature is useless.
This is my problem, and the solution is that I have to understand the domain and come up with my own solutions to this problem. I'm part way there, but not fully.

- Same problem with accurate image and object recognition on mobile devices.

- AI is still way too dumb. There's still no robot whom you can tell to go get this this and that groceries, come home, and prepare some dish.
Or go get these medicines and administer them to your master.
Old or disabled people still need human caretakers even today. Technology is nowhere near making their lives easier.


Some problems I have come across from reading the engineering blogs of companies and organizations:

- Space and aeronautical organizations routinely have to cram complex logic into often underpowered devices. There are a variety of reasons for that
- limited power budgets (they don't have to MW of electricity to play around with in space),
- use of custom ICs (because existing ones are not capable enough or sometimes too capable or not safe enough)
- testing complexity (the more complex a circuit, the more complex its testing because things like radiation which normally don't affect circuits on earth do affect them in space),
- the lifetime of the mission, and many more.
So your JRE or python has some fancy new collection and thread support that you can use to implement some navigation feature? Great! Except that their custom space vehicle IC has no JVM or python ported to that processor, and probably can't run them anyway in its limited radiation hardened memory. But it still needs to navigate correctly!

- Web giants like Cloudflare, FB or Linkedin - anybody who has to service millions to billions of requests per day - routinely run into bottlenecks in the kernel networking stack. These people have to either optimize existing code or come up with entirely new solutions.
- Cloudflare found out that the kernel's networking stack and routing algorithms are too slow (rather, not fast enough) for their purposes. They designed a kernel bypass solution to send some of their packets - ones which don't require any routing decisions - in the fast plane.
- FB customized MySQL - its data structures, its indexing algorithms, possibly its networking interfaces - because stock MySQL couldn't keep up with their massive workloads.
- LinkedIn recently ran into a TCP packet corruption problem. They dug all the way down into the kernel's networking stack, and found a kernel bug that had apparently been around from some 4-5 years. They solved that problem.

---------------------
These are just some examples. The bigger point here is that there are many many unsolved problems.
If you want me to give a list of 5 problems and you want me to select just one for you, then I think your approach to the field of technology itself is wrong.
I suggest you do what I do to expand programming knowledge - follow a lot of blogs and discussion forums, experiment with any and every technology out there, write lots of code without limiting yourself (and I do think expecting libraries to exist is in a way limiting yourself). That's how you discover problems to solve.
 
Zohr Ridhan
Ranch Hand
Posts: 55
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
thank you very much brother !
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
reply
    Bookmark Topic Watch Topic
  • New Topic