C++ domains

A

arnuld

hai folks,

I have just started to learn C++. my main focus is on getting a
job (i.e. why i did choose C++ instead of LISP). i am very passionate
about learning C++. i dont know C and i dont intend to. I have heard
many times that in order to get into a job, one needs to have a
specific domain-knowledge besides the language itself. domains i have
heard of are OS, Databases, Web-programming, Games, AI etc. which all
use different languages.

Is it really necessary to have domain-knowledge in addition to the
different languages for getting a job?

If *yes*, then i want to folllow the OS domain, then i see books like
Operating Systems: Design and Implementation 3/e by Andrew S.
Tanenbaum and Albert S. Woodhull" which uses MINIX as OS & C is the
prerequisite. if i choose OS domain then it means i *have to* learn C.
right?

I also see L4Ka: Pistachio microkernel written entirely in C++ but i
dont think developers there will recommend me doing that as i never did
any real-life programmming . i tried but GNU/HURD developers did not
recommend me doing work on HURD kernel.they say have some experience
with small projects first, HURD kernel will be very complex for me as a
beginner. i only did some LISP from www.gigamonkeys.com/book.

can you recommend some domains where C++ is used & how to get into a
job there? i dont want to learn C, it will put me 6 months behind.
other languages are not a problem.

any other suggestions.

thanks

-- arnuld
 
O

osmium

"arnuld" write:
I have just started to learn C++. my main focus is on getting a
job (i.e. why i did choose C++ instead of LISP). i am very passionate
about learning C++. i dont know C and i dont intend to. I have heard
many times that in order to get into a job, one needs to have a
specific domain-knowledge besides the language itself. domains i have
heard of are OS, Databases, Web-programming, Games, AI etc. which all
use different languages.

Is it really necessary to have domain-knowledge in addition to the
different languages for getting a job?

Think of a person who can drive a car in the US. He claims he is a taxicab
driver. Now set him down in London. Do you see any problems? The taxi
driver needs an extreme amount of local knowledge, rather than a superficial
knowledge, but I think the basic idea holds up. The guy probably can't ever
pronounce Worcestershire; not to mention that the cars are driving on the
wrong side of the street.

The domain knowledge of a new hire is probably pretty shallow, but so is his
knowledge of programming. A banking guy shouldn't throw a fit if someone
at a meeting implies there are 360 days in a year or uses words like imputed
or fungible.
 
A

arnuld

osmium said:
The domain knowledge of a new hire is probably pretty shallow, but so is his
knowledge of programming.

i got what you said, it really hurts. anyway, my main concern is
getting a job using C++. si i think that's good if i start contributing
to OpenSource softwares projects using C++.

i have some work to finish. hence, next month I will start learning
C++, with thati also want to learn about the domain i wil be working in
but i want to be *specific*. what domain-knowledge di i need in order
to:

1.) write application software in C++?

2.) if i do OS development/programming (like HURD/L4, L4Ka:pistachio)?

thanks

--arnuld
 
O

osmium

arnuld said:
i got what you said, it really hurts.

I can't imagine why it would hurt, it is just a simple statement of fact.
In the US the government even gives licenses to practice to people who
barely know what they are doing. Doctors, attorneys.dentists, .... I have
even used the services of some of these people.

But some people have to demonstrate proficiency, engineers and pilots for
example.
 
A

arnuld

osmium said:
I can't imagine why it would hurt, it is just a simple statement of fact.
In the US the government even gives licenses to practice to people who
barely know what they are doing. Doctors, attorneys.dentists, .... I have
even used the services of some of these people.

But some people have to demonstrate proficiency, engineers and pilots for
example.

i didnt mean that. i dont want to explain except one thing:
*proficiency* is what that makes one a *technically* better
professional, like Paul Graham.

i was expecting answer to the problem i explained.

thanks anyway.

-- arnuld
 
D

David

Hello Arnuld,

There are plenty of jobs for people that can program in C++. There
is a wide variety of uses for the language. As you've mentioned,
C++ is one of the tools you've chosen to learn to use. Since your
initial goal is to get a job, I'd suggest learning how best to
solve peoples problems and using your tools to create solutions
they need. C++ can be used almost alone in the embedded world.
Applications generally use other components, like databases and
GUI tools, to aid construction of a useful product. While you
may be able to write all of that, it isn't usually necessary.

I'll take an example from my workplace. We use C++ in many of
our products. There are a few other languages we use, but each
has a purpose. My products cover two areas: embedded systems
and control applications. Both are established areas, so any
new developer that joined my team would first need to work with
the code that has been developed. For instance, knowing how to
use a database is one area that is needed, but there are tools
that we have created. First you must understand what we have
and then perhaps suggest ways that the product or its component
can be improved. That is perhaps a better description of
domain-specific knowlege. While I constantly work in C++
it is not what I generally think about. My thoughts are
generally more about what problems managmenet and users need
me to solve and how I plan on taking all that I have and
solving the new problems. Some new features and components
always need to be written. A newcomer to the team may be
able to solve some of the problems, but rarely by knowing
what existing components can be put together. You're starting
out in C++, but soon you will carry around a whole bag of
code that will help you solve future problems. The first
interface to a new specific device might be difficult to
create. However, once the model has been created we are
adept at recognizing how to mold it to suit future needs.
As you come across similar problems you will add more
tools in your bag.

You could be an expert in C++ and still be of little use
to a new employer. Conversely, you could not yet know
C++ and know our particular problem set and be just as
useless. Combining the two, in any mixture, makes you
valuable. Management needs to decide what mix of
developers are needed. I've seen companies that had
a few terrific domain experts in image recognition that
couldn't program a simple application in C++ and make
it work for their product. Fortunately they knew to
hire a few C++ developers with experience in improving
other peoples products. Together, we combined to have
a useful product. Basically each job you have will
have some element of that story. There are elements you
bring into each new project, elements you contribute,
and elements you get to take with you. Ideally you
will be constantly improving and expanding your core
knowledge and ability to solve peoples problems.

Your first jobs may not seem like much, but experience
matters. Open source projects are a good place to
contribute. So are paying jobs that aren't quite where
you'd like to be for the long term. Each new position
can help shape your career into what you want it to be
and solve the problems you want to.

Good luck,

David
 
A

arnuld

David said:
Hello Arnuld,

There are plenty of jobs for people that can program in C++. There
is a wide variety of uses for the language. As you've mentioned,
C++ is one of the tools you've chosen to learn to use. Since your
initial goal is to get a job, I'd suggest learning how best to
solve peoples problems and using your tools to create solutions
they need. C++ can be used almost alone in the embedded world.
Applications generally use other components, like databases and
GUI tools, to aid construction of a useful product. While you
may be able to write all of that, it isn't usually necessary.

................ said:
Your first jobs may not seem like much, but experience
matters. Open source projects are a good place to
contribute. So are paying jobs that aren't quite where
you'd like to be for the long term. Each new position
can help shape your career into what you want it to be
and solve the problems you want to.

Good luck,

David

hello David,

thanks for your reply. it contains lots of practical learning, i mean
you have shed some light on how people build softwares. I read your
reply, took a print-out, read it again, thought over it for sometime
and concluded the following things or steps for me to take:

1.) 1st, learn C++ well. i mean the syntax and semantics.

2.) 2nd, eat some design ideas of C++ like

a.) why Stroustrup put generic programming the way it is in C++,
b.) learn to use the data-structures provides by STL rather than
creating your own at first place.

3.) learn paradigms of problem-solving like OOD, Generic programmming,
Functional programmming etc. problem solving paradigms are independent
of any language.

4.) Improve/Bug-Fix existing softwares. i am quite passionate about
softwares using GPL, BSD, etc. so i will do them. that is *experience*
part & matters more than the previous 3 steps.

(i will take step 3 together with step-1 or 2)

from now on, i will follow exactly this path. do you think it's right
conclusion?

hey, Can you add/remove/modify my PATH?


you really helped a lot. you dont know my friend, how much burden was
on my head regarding which path should i choose & why & how much that
path will help. you gave me a direction to go.

I am really very much thankful to you for you took time out of your
personal life for this poor fellow.


thanks


-- arnuld
 
R

Rolf Magnus

osmium said:
I can't imagine why it would hurt, it is just a simple statement of fact.
In the US the government even gives licenses to practice to people who
barely know what they are doing. Doctors, attorneys.dentists, .... I
have even used the services of some of these people.

But some people have to demonstrate proficiency, engineers and pilots for
example.

Hmm, that sounds as if you think it's ok for a Doctor to have no clue of
what he's doing.
 
O

osmium

Rolf Magnus said:
Hmm, that sounds as if you think it's ok for a Doctor to have no clue of
what he's doing.

I would hope that most people reading what I said would come to the exact
opposite conclusion.

I see that I forgot to include teachers in the list that are given licenses
without demonstrating skill.
 
?

=?ISO-8859-1?Q?Erik_Wikstr=F6m?=

hello David,

thanks for your reply. it contains lots of practical learning, i mean
you have shed some light on how people build softwares. I read your
reply, took a print-out, read it again, thought over it for sometime
and concluded the following things or steps for me to take:

1.) 1st, learn C++ well. i mean the syntax and semantics.

2.) 2nd, eat some design ideas of C++ like

a.) why Stroustrup put generic programming the way it is in C++,
b.) learn to use the data-structures provides by STL rather than
creating your own at first place.

3.) learn paradigms of problem-solving like OOD, Generic programmming,
Functional programmming etc. problem solving paradigms are independent
of any language.

4.) Improve/Bug-Fix existing softwares. i am quite passionate about
softwares using GPL, BSD, etc. so i will do them. that is *experience*
part & matters more than the previous 3 steps.

(i will take step 3 together with step-1 or 2)

I would say that you should take step 4 along with 1, 2 and 3. The best
way to learn is to do. If you want to learn how to program in C++ you'll
have to program in C++. In the beginning you can do the exercise in the
books you are reading. Later on you can write small programs solving
some problem you have (while it might not be as good as what you can
download, you'll learn a lot). When you feel that you might know what
you are doing find some larger project (like an open-source) and start
contributing.

As for domain-knowledge it's harder, either you have it or you don't,
some jobs requires less (since the task is kind of generic or because
there is some domain-expert) others requires lots. Some employers will
hire your without it and let you learn along the way others will require
you to have it beforehand.

The big question is what kind of domain-knowledge you want to posses,
you might want to specialize in one area or know a little about a lot,
both kinds of people have their place.
 
A

arnuld

Erik said:
I would say that you should take step 4 along with 1, 2 and 3. The best
way to learn is to do. If you want to learn how to program in C++ you'll
have to program in C++. In the beginning you can do the exercise in the
books you are reading. Later on you can write small programs solving
some problem you have (while it might not be as good as what you can
download, you'll learn a lot). When you feel that you might know what
you are doing find some larger project (like an open-source) and start
contributing.

this is exactly what i have decided.
As for domain-knowledge it's harder, either you have it or you don't,

pretty right. because when i thought i should learn about OSs. i found
2 good books, 1st, "Operating Systems: design & Implementation" 3/e by
Andrew Tanenbaum in which he uses MINIX, where you need C. 2nd is "UNIX
programming environment". then i also came to know that i should know
Assembly too if i want to tackle OSs. so my kind of guy will take
around 10-12 months, at least. I felt i am 1 year behind my goal of
C++.

If web-programming, then i need to know PHP, Ruby/Python, MySQL &
PostrgreSQL, CSS, XHTML, AJAX. again i was thrown nearly 1 year behind.

that is why i dropped the idea & came here instead.
some jobs requires less (since the task is kind of generic or because
there is some domain-expert) others requires lots. Some employers will
hire your without it and let you learn along the way others will require
you to have it beforehand.
The big question is what kind of domain-knowledge you want to posses,
you might want to specialize in one area or know a little about a lot,
both kinds of people have their place.

ok you say 2 choices, i like "specialising in one" but as i have shown
you, that sucks too much of time. 2nd one feels ok or so so.

Is there a better way for "specialising in one domain" ? (i mean except
of what i told you)

thanks for your time.


--arnuld
 
?

=?ISO-8859-1?Q?Erik_Wikstr=F6m?=

this is exactly what i have decided.


pretty right. because when i thought i should learn about OSs. i found
2 good books, 1st, "Operating Systems: design & Implementation" 3/e by
Andrew Tanenbaum in which he uses MINIX, where you need C. 2nd is "UNIX
programming environment". then i also came to know that i should know
Assembly too if i want to tackle OSs. so my kind of guy will take
around 10-12 months, at least. I felt i am 1 year behind my goal of
C++.

The book The Design and Implementation of the FreeBSD 5.2 Operating
System is quite good too.
ok you say 2 choices, i like "specialising in one" but as i have shown
you, that sucks too much of time. 2nd one feels ok or so so.

Is there a better way for "specialising in one domain" ? (i mean except
of what i told you)

Be interested, read articles on the net, follow discussions on usenet/
forums, ask questions. But I'd say that the most important is the first,
being interested in the subject.
 
D

David

hello David,

thanks for your reply. it contains lots of practical learning, i mean
you have shed some light on how people build softwares. I read your
reply, took a print-out, read it again, thought over it for sometime
and concluded the following things or steps for me to take:

1.) 1st, learn C++ well. i mean the syntax and semantics.

2.) 2nd, eat some design ideas of C++ like

a.) why Stroustrup put generic programming the way it is in C++,
b.) learn to use the data-structures provides by STL rather than
creating your own at first place.

3.) learn paradigms of problem-solving like OOD, Generic programmming,
Functional programmming etc. problem solving paradigms are independent
of any language.

4.) Improve/Bug-Fix existing softwares. i am quite passionate about
softwares using GPL, BSD, etc. so i will do them. that is *experience*
part & matters more than the previous 3 steps.

(i will take step 3 together with step-1 or 2)

from now on, i will follow exactly this path. do you think it's right
conclusion?

hey, Can you add/remove/modify my PATH?


you really helped a lot. you dont know my friend, how much burden was
on my head regarding which path should i choose & why & how much that
path will help. you gave me a direction to go.

I am really very much thankful to you for you took time out of your
personal life for this poor fellow.


thanks


-- arnuld

Hi Arnuld,

Since you are early in your learning process, I'd suggest all of the
above. Read and understand what books and articles you can. Decide
what is relevant for you now. Don't worry much about the hype that
one technology might be better for some particular purpose. There
are so many ways and tools that can be used for nearly every problem.

This is one of the places that are good for learning C++. Read what
posts you can. Understand what you don't and perhaps contribute
when you know the answer.

Don't restrict yourself to just one language. Learn a couple or
at least don't be afraid to take a look at them. For instance,
LISP is advertised by some to be better than C++ for some problems.
There is nothing wrong with that. You might want to know the
difference. No in regards to that specific statement -- there is
nearly nothing that can't be done with C++. It may take more or
less work, but it can be done. Many of us use C++ for web sites
and other problems that people say there are other tools for.

As for what is best in C++, just learn and use what you need.
Programming is best learned by doing. Try example problems that
your books have. Discover problems that you'd like to solve.
As you learn more, you will be able to solve larger problems.
There can be great power in the programming process when you
sit back and look at your problem.

For instance, I observed a friend learning to program and
he was making some kind of program to play chess. He didn't
yet know about loops (in BASIC) and was using many if statements
to get the same affect. He wasn't detered by what he didn't
know. He could build using what he did know. Later on he
discovered other features of languages and solved some problems
quicker. Don't be afraid of doing what you can and then finding
answers to the problems you do have. Talk with people (such as
here) about what you need help with.

Don't just read about C++ and expect to get it all at once.
You may not even use all of the language features. Learn
by doing, since reading isn't normally the best way of
preparing to do.

Have fun,

David
 
R

Roy Smith

arnuld said:
I have just started to learn C++. my main focus is on getting a
job (i.e. why i did choose C++ instead of LISP). i am very passionate
about learning C++. i dont know C and i dont intend to.

That's fine, to start out. As time goes by, you will certainly want to
learn other languages.
I have heard many times that in order to get into a job, one needs to
have a specific domain-knowledge besides the language itself. domains i
have heard of are OS, Databases, Web-programming, Games, AI etc. which
all use different languages.

Is it necessary? No, but it sure helps. The domain I work in is network
management. If two resumes come in, with roughly the same programming
experience, but one says they've worked in the finance world, and the other
has a background in networking, guess which one we're going to call first?

Our primary goal is to find good C++ programmers, but any additional skills
somebody has can be a big help. Ultimately, we're looking to build a
productive development team, and that means a mix of coding and
domain-specific knowledge. If you can't code your way out of a paper bag,
you won't make the first cut, but to get the job, you've got to show us
something more than just coding skills. It's like building a ball team.
Home-run hitters are great to have, but a switch-hitting utility infielder
with good speed on the base paths and a strong arm is useful too.
If i choose OS domain then it means i *have to* learn C. right?

Today, C is pretty much king in the operating system world. So, if that's
your goal, then yes, I'd say learning C would be a good thing.
can you recommend some domains where C++ is used & how to get into a
job there? i dont want to learn C, it will put me 6 months behind.

I realize that right now, 6 months may seem line an eternity to you, but
trust me, eventually it'll seem like a blink of an eye. I can also
guarantee that whatever languages and tools you learn now will need to get
replaced by new languages and tools (and operating systems) in a few years.
This is a fast-moving field. Expect to keep learning new stuff. Either
that, or become a dinosaur in less time than it takes to say, "Everybody
wants to hire me because I know XXX".
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,994
Messages
2,570,223
Members
46,810
Latest member
Kassie0918

Latest Threads

Top