Wanna Enter the Real Programmer's World

ralbhat

Disciple
Hey,

Over the past 3 years I've been trying to learn enough programming to really become what is called a core programmer. The sort of guy who can really do EVERYTHING he wants.
I've done some C++, i understand just the basics of pointers and i really don't know how to go ahead with it (btw i've covered pointers from the Robert Lafore book)
I'm also starting Python, nothing flashy there yet though.
Recently someone told me that if i really want to be able to break a system or understand what faults there are then C/C++ would help, but i really don't understand how. Is there some topic that i just haven't heard of? Someone mentioned something called a 'segment fault'. I have no idea about this and REALLY want to learn. Could someone point me to the right web-page / book? I know there are a hundred sites out there but the trouble is a lot of them are misleading. And i really don't wanna waste a lot of time just to ealise that i learnt more or less nothing.
Help really required!
 
Okay let us start from the beginning

- Learn x86 architecture, and I do not mean 8086 or 8088 architecture.

- Get comfortable to see assembly codes, try to understand it if you cannot master it.

- Master C programming language.

- Develop some troubleshooting skills.

- Start using Linux for all these.

Books -

- Intel/AMD manuals.

- James L Turley.

- The C Programming language by K&R

- Harbinson and Steele.

- CLR.

- Man pages on your Linux system to help you.

Good luck
 
It takes time. It takes courage. It takes patience. Most important, it should be fun. You should enjoy it.

The best thing is to start with data structures. Stack, Link Lists, Trees etc. If you are already done with these, do a basic project. Pick something interesting. A project would give you a goal that you want to accomplish, else you would just be surfing the internet looking here and there.

And stick to one language for now. I would suggest c++ or c#.

Happy Coding!!
 
the basic funda for Programming that i think is the "LOGIC".

you should develop your own skills coz a same program can be done in many ways.so,it's all about using your logic to reduce the code of the program.

every language is a lil bit different from the other with different keywords.but,the logic you apply is most important.

IMO make your C/C++ base more stronger by practicing & later when you become a PRO go for Java.
 
I ll still personally suggest -

stick to C and assembly for the moment if you really want to learn the murky innards of a system :).
 
Like everyone has said, stick to C and x86 Assembly language. Use Linux and the gcc compiler. Whatever you do, don't waste your time using TurboC
 
What you need is Computer Architecture and Operating Systems Architecture/Internals/API.

Programming is crap, you learn a programming language in 3 days. Be it ASM, JAVA, C++, C.

And you learn Data Structures in a week and as for Algorithms, the day since you were born. Problem solving that is.

As for proficiency at a programming language it comes only with practice in that particular language and style. But its not really needed, for you as of now. later gain that. its necessary.
 
a_k_s_h_a_y said:
Programming is crap, you learn a programming language in 3 days. Be it ASM, JAVA, C++, C.
Were u born stupid or you have a habbit of making a mockery out of yourself on the internet ?
No programming language can be known in 3 days yaar ..
 
a_k_s_h_a_y said:
What you need is Computer Architecture and Operating Systems Architecture/Internals/API.
Programming is crap, you learn a programming language in 3 days. Be it ASM, JAVA, C++, C.
And you learn Data Structures in a week and as for Algorithms, the day since you were born. Problem solving that is.
As for proficiency at a programming language it comes only with practice in that particular language and style. But its not really needed.

Wow genius you are who says programming is crap, perhaps you write crap programs and thus presume same for programming.
One who really learns *data structures* in one week cannot be a computer engineering student. He has to be a academic mathematician or a number theorist, which you are not so stop giving out false info here.

Oh BTW even after programming in C for llike 7 years now I still think I do not know C confidently. Let us see how 3 days C experts think on this.

Algorithms are not natural born Einstein. If you think we meant algorithms to make a cup of tea then have a bath and come again, we meant algorithms for real world problems not household activites. Algos to solve mathematical recurrences, searching problems, efficient cache utilization etc.

Please do not say something just for the heck of it.
 
1) Get some good grip and develop some good skills in C and C++.
2) After getting some grip on those, start with data structures (Most imp).

After this, It's upto you that on which path you wanna go.
IF you wanna become computer engineer, system developer... follow steps 3 and 4. I dont have much knowledge about it though.
3) If you are computer engineering student you must know Discrete Maths. Study it if you can. try to convert some algos into programs.(Not necessary though but would be better)(don't have idea on books.)
4) Start getting some knowledge on X86 arch. (Refer MSDN for that. x86 Architecture). If you dont have knowledge on assembly/OS then refer some books on introduction, methodologies, characteristics of it

- And IF you wanna become software engineer start learning some serious object oriented programming language like JAVA. If you wanna learn java from scratch, refer Hear First java by kethy sierra. it's very good for beginners.
- You can also study C#and Visual Studio.
- Also Start understanding/mastering OOAD- Object oriented Analysis design.
- Once you finish this you must be able to write code for some good basic/mainstream software as well as be able to design them.
- Take some project to guide your way towards goal. It will help you the most.
- (optional) Pass some certification like SCJP if you want, will help you boost your confidence.
 
a_k_s_h_a_y said:
Programming is crap, you learn a programming language in 3 days. Be it ASM, JAVA, C++, C.

Thats a very bold statement. I hope you only meant semantics. Pattern designing is altogether a different ball game. Yeah if its Java, then probably makes sense with Eclipse, the spoon feeder.

~LT
 
I think what akshay meant to say were that programming languages were a means to an end, as long as you know the stuff that comes before that, there is no need to glorify xyz language and all that.

If you just want to break stuff, you don't even really need to code. Testing is an art all by itself. And a lot more fun too ( breaking stuff is a lot easier than making them :p).
 
greenhorn said:
I think what akshay meant to say were that programming languages were a means to an end, as long as you know the stuff that comes before that, there is no need to glorify xyz language and all that.

Exactly.

To learn the syntax of a programming language it takes only few days.

To gain proficiently it takes practice. Already told.

Don't focus too much on mastering the in and outs of a language, unless you want to be serious compiler designer.

1 week in holidays is good enough to finish data structures. ask any engineering student. all study just the day before the exam.

It took most of my classmates only 2-3 days to learn Java ! And as for algorithms you learn problem solving since childhood, how you go about in a new situation, in any activity you get the job done in a sequence of actions and finally end up either successful or fail. See you been doing algorithms since day 1.

Given an algorithm for a newly discovered hack, any body out there can code the solution. First get the algorithm.

EDIT..!

How did I forget!!

In one of recent placement screening test, we were had to adapt to a propitiatory language right on the spot and code the solution to a given problem in that language all in 2 hours. And no wonder many got the answer right. But the problem focused more on design/logic then exploring language features.
 
greenhorn said:
I think what akshay meant to say were that programming languages were a means to an end, as long as you know the stuff that comes before that, there is no need to glorify xyz language and all that.

If you just want to break stuff, you don't even really need to code. Testing is an art all by itself. And a lot more fun too ( breaking stuff is a lot easier than making them :p).

I dont agree to Programming language taken that lightly. Each programming language has it pros and cons and before you jump to just using any of it, you need to justify why that specific language, hence I am pretty sure you cant do that within days counted. Whenever I read Stroustoup I discover new technique that I hadn't explored previously (nope those techniques are not there in the book) and realize how much I haven't yet known in-spite of coding for so many years.

Similarly about python, I have been using it for last couple of years, but there are so many techniques to be discovered, hence can't say that I yes I know python completely, as a matter of fact I can't say same for C++.

@greenie, I am thinking that you are into quality assurance industry... am I correct?

~LT
 
At the expense of being trolled at, read point 2 in this post

Its a couple of years old but I agree with it. You have to get your basics absolutely right.

For programmers as I see it (and I'm of course, no expert), there are 2 major ways. You either go small or you go big. I don't mean the work you do but the level at which you do it.

If you go down into the core, you want to know all the basics and I mean the absolute basics that others take for granted. Know your architectures and your system.

If you want to go up into application development and software design, learn higher level languages which add several levels of abstraction from the core to you. Sure, it makes things more "bloated and slower" (as some say) but it makes development easier and quicker. Honestly, why reinvent the wheel?

I'd suggest that you focus on the core stuff if you want to become a core programmer. You'd be looking at stuff at the level of operating systems and compilers. You should have a working knowledge of high level languages too (what if you need to make a program to automate tasks on your PC). But if I were you, I'd spend more time diving deeper into understanding OS' and compilers. Pickup something like Andrew Tannenbaum's book on OS' and the one on Computer Architecture and Organization if you haven't already. Learn Theoretical Computer Science (its a subject in Engineering) and learn about compilers.

That should be a good enough start :)

Oh yeah, if you're wondering about OS' (I can't believe I'm going to say this) but I'd play around with a couple of Linux distros. (Note: I don't mean to start an OS war)

I'm a Windows user myself and I have to say, contrary to popular belief you can learn about the way Windows works and even get a lot of source/documentation out there. I just feel its easier to do so with linux with there being a lot of help out there, easy availability of documentation/source code and more things to break.

I feel its easier to make/break linux because it gives you more things to play with. Go screw up your (test) OS and fix it.. play with things. Explore and enjoy. Until you start exploring, learning won't go too far.
 
ralbhat said:
Over the past 3 years I've been trying to learn enough programming to really become what is called a core programmer. The sort of guy who can really do EVERYTHING he wants.

I think thats a very ambitious goal to shoot for, not to mention vague.

Is it desirable to be able to 'do EVERYTHING he wants' or to be able to get others to do it for you :)

You might have come across this book

If you learn to think in that fashion the rest will take care of it itself.

Stay away from language wars they are pointless. Be totally platform & language agnostic.

linuxtechie said:
hence can't say that I yes I know python completely, as a matter of fact I can't say same for C++.

Shakespeare did not know every single word in english.
Paul McCartney could not read music when he started.

I'm not sure what the point of knowing something completely is, surely the goal is to be able to solve any problem given adequate resources. In the trenches you rarely get to write elegant code, time constraints will ensure that.

John Anderton said:
Oh yeah, if you're wondering about OS' (I can't believe I'm going to say this) but I'd play around with a couple of Linux distros. (Note: I don't mean to start an OS war)
I'm a Windows user myself and I have to say, contrary to popular belief you can learn about the way Windows works and even get a lot of source/documentation out there. I just feel its easier to do so with linux with there being a lot of help out there, easy availability of documentation/source code and more things to break.
I feel its easier to make/break linux because it gives you more things to play with. Go screw up your (test) OS and fix it.. play with things. Explore and enjoy. Until you start exploring, learning won't go too far.

I'll agree upto the point of learning the basics. But it will only tell you how windows works on the surface. To learn how windows works you have to play with windows and the same with any system. They each have their own quirks and you cant do the job properly otherwise.
 
Guys being a good Algorithm designer and a good Programmer are totally different things. And it takes considerable of time to be either. To be a good Algorithm designer you dont even need a computer, Algorithms existed before there were any.

Akshay, to be a good programmer does not mean knowing the syntax alone. Play with threads, classes, pointers and you will find that you can solve a problem using multiple ways.
 
there is a world beyond c/java/php or whatever language people think is 'cool'

personally i was taught BASIC and C++. Learnt ASM (for a whole bunch of microprocessors), and COBOL from my line of work.

Can't write a C program to save my life at the moment :ashamed: But did know it kinda well at one point - Enough to write code better than my instructor at the analysis of algorithms class :p

Learning C doesnt help you much if you are going to write code in Languages which are not the same way. I've had to pretty much un learn all the C I'd known.

To the OP - what background are you from? what exactly do you want to do? ( any specific goals?) Probably that can let us help you choose a path better.

@ LT - yup I work in QA now. Apart from the occasional foray into scripting, dont write any code now. Breaking crap code ( the stuff written by the average coder in the organization I work in) is more predictable, and more fun than writing crap code (given the timelines and circumstances :D)
 
Back
Top