Member Avatar for I_m_rude

hi..

Although, this thread has no connection with C or programming. But it is good for everyone to look at this thread replies. I request all admins of C/C++ that please share your success stories. Just share that what have you all done in your universities/scholl time which made you to come to this level of programming. How you develop your interests and what problems you have faced. Which things you have avoided and what should we do so as to a be awesome programmer like you.It willbe helpful for beginners and everyone. please make this thread as "must read" and let everyone learn from you. thanks. It is request to Deceptikon, WAltP, Ancient Dragon and other awesome players of C/C+. thanks.

Recommended Answers

All 17 Replies

Since this has nothing to do with C it should be posted elsewhere. Like Geeks Lounge.

Member Avatar for I_m_rude

sir, i respect u so i can't contradict you. I know i can post there, but that is not higly visited by many. C is highly visited by many people as it is most basic language. So please sir reply on this and share your experience. it is request to everybody. thanks. please make it here only and mark it as "must read"

Member Rules

Do read the forum description to ensure it is is relevant for your posting.

Members who break a rule will usually be warned, followed by a points-based infraction for subsequent offenses. When a member is given an infraction, they accrue points which remain on their record for a time period. 10 or more infraction points will result in an auto-ban from DaniWeb effective until the number of active points falls below 10.

Do you really want to start getting infractions? I suggest you reread all the member rules again.

please make this thread as "must read"

There is only one MUST READ thread and that's the DaniWeb Rules. All others are optional just as this one should be.

Just share that what have you all done in your universities/scholl time which made you to come to this level of programming

Nothing out of the ordinary at the university. Programmers become competent and proficient by on-the-job experience, and lots of it. And they don't become proficient in every part of programming because the field is just too broad. Same idea as a medical Doctor who specializes on one part of medicine. If you want to be a jack of all trades you will not be proficient in any one. In college you just hit the highlights of programming, you don't really start learning the trade until you graduate and start working.

You will also want to study other fields of interest while in college because programming is not done in a vacuum but in conjunction with some other field. For example if you are interested in Banking you will find thousands of programmers there who also know a lot about banking.

Member Avatar for I_m_rude

no body is replying. that why i want this thread to be in C or C++ and then transfer it to geek lounge. DESTROED AGAIN because of waltP.

commented: Time to get over your love of me and hate of Walt. It's getting ridiculous. +0

Just share that what have you all done in your universities/scholl time which made you to come to this level of programming.

For programming, the University / School part was mostly irrelevant, I only ever took a few programming courses and they were all compulsory courses (as part of engineering curriculums there are usually a few introductory programming or numerical methods courses) that I took long after I was already more than proficient in programming. Don't think that university courses will teach you to be a programmer. They might teach you to be a good computer scientist, or even a software engineer (although, I'm very skeptical of that), but not a programmer. Programming is more akin to a craft, and is only learn as such, like other "crafts" like being a blacksmith or plumber, you learn by doing it a lot, filling your bag of tricks, taking example on more experienced people or mentors, and with lots of time.

I would describe my experience getting to where I am in three phases:

Phase 1 (formative years, and having fun):
Taking the analogy of becoming a plumber, this phase would be the years when you nag your dad to go with him to work (as a plumber) and do simple plumbing work, for fun.
By and large, what made me come to this level of programming was challenging myself constantly. Starting in teenage years is the best, you combine the capacity to be excited and passionate about projects, with the naiveté of believing that you can take on any task (and you'll find that most hardcore programmers, today, started as teenagers). Those years, for me, where a succession of taking on cool but really tough problems or projects, and then restlessly trying to solve them. Many of those projects were never really completed because I would take on the really tough part first, and when there were only easy things left to do, I would lose interest and move on to another exciting challenge. And, many of those projects resulted in failure (usually, insurmountable flaws in the architecture of the software), and these helped tremendously in having a real sense for why certain designs are good and others inevitably lead to failure (or trouble in general). When you are in that phase of learning to program, it is not so much about the actual goals of the project (e.g., make a racing game, or whatever), it is about what you can learn while doing it. In other words, there is no point in writing programs or taking on projects where you already know how to solve most of the problems. The best thing is if you start out barely having a clue how people actually make this kind of program, then, you learn a lot (either by solving the problems with your own "solutions" or by learning to use tools of the trade), and once you've learned what you wanted to learn, you will usually see another challenge on the horizon, and go for it. Every challenging project is a leap forward, regardless of the actual resulting software or library, complete or incomplete, success or failure.

Phase 2 (applying the skills to useful tasks):
In the plumber analogy, this is when you start taking on real plumbing jobs on your own.
At some point, there are a number of realizations that come. You want to leave behind the fairy tales for the real world. You want to move from toy projects to useful things. You realize that all your skills now amount to something substantial and useful. You've learned to narrow down your interests to the few areas that always excite you, time and time again. And your rate of success in those toy projects has increased substantially. At this point, you're ready to take on real and useful projects. They might still be personally and somewhat toy-ish projects, but your perspective changes. The challenges are much different now. The goals are to make durable, maintainable, flexible and robust software, things that will work and work well, and for a long time. Around that phase is when I started to accumulate library code that I still use today (after several refactorings of it, of course). This phase is mostly about learning to carry things through, solving problems sustainably (as opposed to "just getting it to work"), and learning to develop a certain discipline about simple stuff like code formatting, commenting, version control, folder organization, unit-testing, etc. The exciting part of this phase is the sense of accomplishment associated with building something solid and substantial.

Phase 3 (over the hill):
In the plumber analogy, this is when your ready to have your own plumbing company (or be a partner in one), mastering the craft.
I wouldn't say I'm quite there yet, but it's surely starting to smell a lot like it from where I stand. At this point, you've taken on quite a few substantial "real" projects. Programming has very few secrets left for you. When you take on projects, you're able to anticipate most challenges, evaluate the time required, plan most of the design ahead of time, and you rarely have surprises along the way (and debugging is a thing of the past). In some sense, it gets kinda boring (just like any other job), but it's also comfortable. And that's when it is important that you learned (in phase 1) what really makes you tick, as in, what kind of programs you really love to make. Because the excitement of programming dampens out as it becomes more and more mundane, but the excitement of developing new solutions in the field you work in is what keeps you up and enjoying what you do.

Needless to say, expect about 10 years or so to go through those phases.

How you develop your interests

Be attentive to yourself. Challenge yourself with projects that you think are "cool" and "awesome". Not what other people generally find cool. I started out doing mostly computer game programming (3D graphics, OpenGL stuff) but also a few other things, because that was the cool thing to do at the time (with the booming hardware capabilities, and early 3D games from "Wolfenstein 3D" all the way to "Halflife"). But, luckily for me, in 3D graphics programming, there is a substantial amount of mathematical and numerical programming to do, and I found myself, time and time again, gravitating towards doing heavily mathematical problems (e.g., particle systems, random land-scape and texture generation algorithms, physics engines, collision detection, and even artificial intelligence) and completely ignoring the "beautiful graphics", game concepts or gameplay aspects of it. Being able to recognize that and say, "hey, this is what I find to be cool and awesome", is really the important part. So, first, you must expand your horizons and explore different things, but keep being attentive to what you enjoy doing (not what makes other people go "wow!" when you show it to them, but the things that kept you up until sun-rise, the kind of problems you gravitate towards or can't get enough of, those that you always seem to enjoy and want to make perfect).

what problems you have faced.

For a long time, my problem was that I wasn't open enough to suggestions. In other words, I was arrogant and thought that my solutions were awesome and the best and everybody else sucked. I didn't read enough about coding practices and why experienced programmers did things a certain way that seemed convoluted to me. I didn't interact much with other programmers, read about guidelines, coding patterns, solutions, tricks, etc. that experienced programmers recommend, in other words, I was in my little bubble. Of course, it wasn't all bad, I learned to be really good at solving problems on my own, and I also learned many of the typical "good coding practices and lessons learned" by experiencing them first hand (i.e., not doing those things and having to deal with all the problems that ensue). But, I wouldn't recommend that, because as soon as I started to be more open (especially, as I was seeing that a lot of the expert advices made a lot of sense, from what I had learned first hand), I made huge leaps forward.

Which things you have avoided

Stalling. Avoid stalling. First, in the sense that you should avoid doing things that are too comfortable (at least, not until "Phase 3"), challenge yourself. And, in the sense that if you find yourself bored when working on a project and you have a hard time sitting down and coding (i.e., literally "stalling"), it is most likely because you are driving on a flat, boring paved road, and you need to move on to rougher terrains. This is especially true when doing your own toy projects, if it is not exciting enough to motivate you to code, then that toy is no longer fun to play with, so, go get another one, don't stall.

what should we do so as to a be awesome programmer like you.

Program, program, and then program some more. And, don't stay inside your own bubble while doing it.

commented: hats off! it's really valuable whosoever will read it. ;) +0
commented: Nice read for young coders like me :) +0

I have to disagree with mike about University, however, I graduated in the late 70s and I know that Computer Science has changed dramatically since then so I can only speak for myself in the dark ages. The skills I acquired in University were absolutely invaluable in developing my skills as a programmer. And I speak not only of my programming skills (even though my personal style took years to evolve), but especially of my analytical skills. If you don't develop those you will never be more than merely competent.

As mike so correctly states, you must write code in order to get better at it. However, if all you are doing is writing the same code over and over you may never get better at it. Just faster.

Always keep learning. And not just what you need to get the job done. Put your code out there for everyone to see and critique. Almost all of the code I wrote from 1999 to 2008 was vbScript. There were several reasons for this which I won't go into. But what it meant was that anyone could look at the code. I couldn't hide it with a compile. Because my code was so visible I took great pains to make it as clear and readable as possible. It's amazing how much better your code is when everyone (figuratively) is looking over your shoulder.

commented: yo! awesomly shared. +0
Member Avatar for I_m_rude

@mike 2000 17 your all 3 phases are concentrated towards projects and projects. hey! Can you please share the projects we should take at this age (time) and what all projects you have taken ? it will really be an awesome part which we want to listen here only. please do it. thanks in advance to you. it is really valuable and worthful. ;)

your all 3 phases are concentrated towards projects and projects. hey! Can you please share the projects we should take at this age (time) and what all projects you have taken?

If I skim through my old dev-folders in my computer, I get more or less this list of projects (by phase, and more or less in chronological order):

Phase 1: (more or less junior-high to high-school, up to maybe first half of undergraduate studies) (also, most of these things were never really completed, but at least the core of it was done)

GUI-based Calculator (Visual Basic)
Text-based RPG game (TI-83 assembly) (during boring math classes in high-school)
Transparent Notepad (Delphi & VCL)
Code-line Counter (Delphi & VCL)
Encrypted Archiving Program (Delphi & VCL) (kinda like a Winzip program, but for a home-made encryted archive format)
3D DNA Visualization Program (Delphi & OpenGL)
Started a 1st 3D Rendering & Game Engine (Delphi & OpenGL) (called it "Linak")
3D Skating game (Delphi & OpenGL) (never went very far with that)
3D Model Editor (Delphi, VCL & OpenGL) (never went very far with that)
Started a 2nd 3D Rendering & Game Engine (Delphi & OpenGL) (called it "Element")
Random Landscape Generator Algorithms & Editor (Delphi, VCL & OpenGL)
OpenGL-friendly Font Generator (Delphi, VCL & OpenGL)
Simple FPS Game (Delphi & OpenGL) (running on "Element")
3D Physics Engine and Collision Detector (Delphi) (for "Element")
Software-based Multi-texturing (Delphi & OpenGL) (before video cards could support multi-texturing)
Generalized my Random Landscape Generator to other contexts (Delphi & OpenGL) (generate textures and natural objects)
Created a Asteroid-field Generator for a space-battle game (Delphi & OpenGL) (running on a friend's game engine)
Flight controllers and emulators for a space-battle game and a hover-craft racing game (Delphi & OpenGL) (running on a friend's game engine)
Started a 3rd 3D Rendering & Game Engine (Delphi & OpenGL) (called it "Chi")
Particle System Engine & Editor (Delphi & OpenGL) (for "Chi")
Roller-coaster Track Editor (Delphi & OpenGL) (for some school project)
Applied Random Generators to make dynamic textured skies, dynamic volumetric skies, and dynamic water surfaces (Delphi & OpenGL) (for "Chi")
Bicycle-riding Game (Delphi & OpenGL) (running on "Chi")

Phase 2: (more or less during undergraduate and Master's studies)
Plugin System for "Chi" (Delphi & C++) (note: this was really hard and painful, probably the toughest time I had on a project, given my skills at the time)
2D & 3D Multi-body Dynamics Simulator (C++) (undergraduate thesis on closed-form contact dynamics simulation) (first generation of "ReaK", the library I currently work on)
Control Software and Trajectory Optimization for a Kuka KR500 Robot (Robo-coaster) (C++ and Matlab) (part of a summer internship)
Control & Simulation Software for a Satellite Emulation Platform (Matlab, LabVIEW and MSC.ADAMS) (part of a summer internship)
Evolutionary Neural-Network Controllers for Inter-planetary Low-thrust Trajectory Optimization (C++)
Control Software for an Autonomous Lunar Excavator Robot (C and C++) (part of a NASA competition, but the software part was just to help other team members, my main task was to design and build the robot, which I did (I'm a Mechanical Engineer, by the way))
Design Optimization Software for an industrial circuit breaker mechanism (Matlab and MSC.ADAMS) (part of a summer internship)
Ported the "Chi" Engine to C++ (C++Builder and VCL) (embedded the OpenGL rendering in VCL GUI components)
Ground-station Software for a Can-Sat project (nano-satellite) (C++) (using "Chi")
Control Software for an autonomous R2D2-style robot (C++ & MaCI) (part of a robotics course project / mini-competition)
Refactored the Multi-body Dynamics Simulator to use the "Kinetostatics Transmission Elements" (KTE) Paradigm (C++) (part of Master's thesis)
Asynchronous Control Architecture for a Humanoid Robot (WorkPartner) (C++) (part of Master's thesis)
Model-based Compliance Control Software for Phyiscal Human-Robot Interations (C++) (the main part of my Master's thesis)
Machine-learning Algorithms to solve Pursuit-Evasion Games (Game Theory) (C++) (part of a graduate course project)

Phase 3: (this is what I am currently working on)
A comprehensive C++ library for doing multi-body dynamics simulation, numerical analysis in general, control and estimation for dynamics systems, kinematics trajectory generation, optimization and execution for robotic manipulators, and last but not least, sampling-based motion planning in high-dimensional, dynamic and uncertain environments. All this is for an application of autonomous and safe grasping of a non-cooperative satellite using a robotic manipulator (e.g., Canadarm), which is for the purpose of on-orbit servicing of satellites and general mitigation of the accumulation of space debris.

Wow.. now that I look at it, I've done a lot of stuff.. The last time I counted, I think it amounts to about 1 million lines of code in total. So, I hope that gives you a good idea of the general progression of the projects and amount of work to get to phase 3. The above is basically my entire professional career-path so far (on the software side, of course, I'm a mech. engineer, so I've done a lot of stuff not related to programming too).

commented: eyes are not closing :-O +0
commented: Great post, thanks for taking the time to write such detail as well +0
Member Avatar for I_m_rude

oh my god! how did you manage to do all these things ? didn't have you your curriculum at that time ? how did you get so much time to do this ?

how did you get so much time to do this ?

First, this was in a span of about 13 years (starting when I was 13-14 or so). Second, you have to understand that most of the stuff in phase 1 (toy projects) were sort of half completed and done in a pretty reckless manner. Third, a lot of the toy projects didn't take half as much time as you'd expect, most of them were the kind of thing you can get done in your spare time over a few weeks, with a few more intense periods (e.g., an intense weekend here and there). Fourth, when you enjoy what you do, you're not counting the hours. Fifth, most of the stuff in phase 2 were done either as part of a full-time employment (internship), or as part of a student team project and, if you've ever been a part of one of those, you know it is a super-intense rush to get things done (e.g., in my last student team project, a year-long space-bourne project, in the last 10 days or so, most of us didn't sleep more than 2-3 hours per night, watch the final day here). And finally, anything worth doing takes time and dedication, that's just a fact of life.

didn't have you your curriculum at that time ?

These things are my curriculum. You cannot "have your curriculum" before you start doing things like that, because it is the things that you have done that make up your curriculum. If by "curriculum" you mean the pieces of paper they call diplomas, then you might have to revise your definitions, because that's only a small part of what you'd put in a "curriculum vitae". When I was just starting college, I got offered a job in the computer game industry, they didn't care one bit that all I had was a high-school degree. I was nearly hired by a major space agency for a job for which none of my degrees had any relevance. Sure, those degrees can put you one foot through the door (and an expectation of a higher wage), but their not what takes you through, at least, not the heavier doors. The important part of those years in university is not sitting through courses or passing exams, it's taking those years to dedicate yourself to your field or passion (including learning valuable things in class, but that's only part of it). Think about it, if you were an employer trying to recruit for your software firm, would you rather hire a guy with my kind of track record but no degree at all related to computer science or programming? Or a guy with a bachelor or masters in computer science but no visible record of ever doing anything more than passing the homework / project requirements of his courses? The answer is obvious. Don't fool yourself into thinking that being in that second category is good or even sufficient.

P.S.: Change your avatar and name dude, this is just sily.

Member Avatar for I_m_rude

Actually, I have changed by name once, so can't change now. is there any one that i can change my name ? :-)

Member Avatar for iamthwee

[offtopic]
@mike (your Project manager?) in the youtube video is a real hottie. I don't think I'd be able to concentrate on what I was doing if she was leading... haha.
[/offtopic]

commented: what is it's relenavnce with the topic ? +0

@ mike

You projects are way out of my bounds :( I would try to do some these programs enlisted above.

@ reverend Jim & @ mike
Really need to increase my programming capabilities. Thanks for these wonderful informative and motivating posts. :)

@mike (your Project manager?) in the youtube video is a real hottie. I don't think I'd be able to concentrate on what I was doing if she was leading... haha.

A rather juvenile comment if you ask me. Kat is one of the most competent engineers I know, and she used to be an airforce jet pilot. She now works as a system's engineer for one of the largest space contractors in Europe, and is well on her way to becoming an astronaut. You can't really be distracted by her good looks (which she certainly has), not with the amount of concentration, sharpness and professionalism required just to hold a project-related conversation with her. If anything, she has the opposite effect on people.

You projects are way out of my bounds :(

Out of bounds but not out of reach. That's what it means to challenge yourself, to reach outside your boundaries.

@mike you are really motivating. Can you suggest me any topic on which i can start ? i am doing graduation and know C, C++ and little bit java and python.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.