transition from programmer to developer

S

steven acer

Hi, i know the terms might sound interchangeable but i'm basing on my
definition
or yet my understanding of each of them.
i have been working as a java programmer, it's been 2 years right
after
i graduated with a BS in computer science.my job concentrated on
implementing
logic that other people, software developers, designed and put in
place.
i'm at the point now where i consider myself a strong programmer, i
know most of the api
and i can get most of my tasks done.
what i fell is still i still lack is the ability to depict algorithms
and software designs. I don't
want to just write code or "implement" i want to have a concise view
on the whole process of development.
for example, given a problem in the real world, i'm still not able to
port that problem efficiently into
the development and software development process domains and extract a
code implementation for it,
If i read some other developer's logic or code i can understand it but
i always wonder how he got there.
I don't think like a developer yet, how do i learn to do so?
I've been reading a lot of books lately like "Engineering Software -
Applied Object Oriented Analysis and Design Using UML",
"object oriented system development" to name a few.
is it good what else would you suggest?

i don't know if i was able to clearly explain what i'm aiming
for.Anyways feel free to ask me for further clarifications
and please give your opinion and suggestions
 
A

Arved Sandstrom

steven acer said:
Hi, i know the terms might sound interchangeable but i'm basing on my
definition
or yet my understanding of each of them.
i have been working as a java programmer, it's been 2 years right
after
i graduated with a BS in computer science.my job concentrated on
implementing
logic that other people, software developers, designed and put in
place.
i'm at the point now where i consider myself a strong programmer, i
know most of the api
and i can get most of my tasks done.
what i fell is still i still lack is the ability to depict algorithms
and software designs. I don't
want to just write code or "implement" i want to have a concise view
on the whole process of development.
for example, given a problem in the real world, i'm still not able to
port that problem efficiently into
the development and software development process domains and extract a
code implementation for it,
If i read some other developer's logic or code i can understand it but
i always wonder how he got there.
I don't think like a developer yet, how do i learn to do so?
I've been reading a lot of books lately like "Engineering Software -
Applied Object Oriented Analysis and Design Using UML",
"object oriented system development" to name a few.
is it good what else would you suggest?

i don't know if i was able to clearly explain what i'm aiming
for.Anyways feel free to ask me for further clarifications
and please give your opinion and suggestions

Yes, you explained yourself clearly.

Reading a lot of books - I happen to have a very similar book - isn't a bad
start, assuming they're well chosen. Reading newsgroups is another good
thing to do. Lots and lots of Googling on design issues is also time well
spent - after a while you'll recognize what's quality commentary and what's
not.

It's not a bad idea to start a project in your own time, and conscientiously
work through all aspects of the lifecycle. Regardless of which lifecycle you
pick, spend more time than one normally might on design, both high and low
level. Also do the testing and documentation to the recommended degree, as
opposed to what you often see in the real world.

Make sure the project is challenging enough that most design choices are not
black & white. Document why you chose to do things a certain way - even
better, design things so you have maximum flexibility to do things another
way. Think like a real-world developer, and even fake it out (this requires
some schizophrenia)...give yourself some change requests late in
implementation, or even after it.

And you've said that you look at plenty of code. Why not ask yourself some
questions about it? See if you could have done things differently. You'll
see plenty of mediocre code, so don't assume that someone who has 5 or 10 or
20 years in the biz is very good at it.

Just some thoughts. In my experience people who start showing an actual
interest in development as opposed to just coding are already halfway there.

AHS
 
A

Arne Vajhøj

steven said:
i have been working as a java programmer, it's been 2 years right
after
i graduated with a BS in computer science.my job concentrated on
implementing
logic that other people, software developers, designed and put in
place.
i'm at the point now where i consider myself a strong programmer, i
know most of the api
and i can get most of my tasks done.
what i fell is still i still lack is the ability to depict algorithms
and software designs. I don't
want to just write code or "implement" i want to have a concise view
on the whole process of development.
for example, given a problem in the real world, i'm still not able to
port that problem efficiently into
the development and software development process domains and extract a
code implementation for it,
If i read some other developer's logic or code i can understand it but
i always wonder how he got there.
I don't think like a developer yet, how do i learn to do so?
I've been reading a lot of books lately like "Engineering Software -
Applied Object Oriented Analysis and Design Using UML",
"object oriented system development" to name a few.
is it good what else would you suggest?

Applying UML and Patterns / Craig Larman
Design Patterns / Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Effective Java Programming Language Guide / Joshua Bloch

are some relevant titles.

Arne
 
S

steven acer

Yes, you explained yourself clearly.

Reading a lot of books - I happen to have a very similar book - isn't a bad
start, assuming they're well chosen. Reading newsgroups is another good
thing to do. Lots and lots of Googling on design issues is also time well
spent - after a while you'll recognize what's quality commentary and what's
not.

It's not a bad idea to start a project in your own time, and conscientiously
work through all aspects of the lifecycle. Regardless of which lifecycle you
pick, spend more time than one normally might on design, both high and low
level. Also do the testing and documentation to the recommended degree, as
opposed to what you often see in the real world.

Make sure the project is challenging enough that most design choices are not
black & white. Document why you chose to do things a certain way - even
better, design things so you have maximum flexibility to do things another
way. Think like a real-world developer, and even fake it out (this requires
some schizophrenia)...give yourself some change requests late in
implementation, or even after it.

And you've said that you look at plenty of code. Why not ask yourself some
questions about it? See if you could have done things differently. You'll
see plenty of mediocre code, so don't assume that someone who has 5 or 10 or
20 years in the biz is very good at it.

Just some thoughts. In my experience people who start showing an actual
interest in development as opposed to just coding are already halfway there.

AHS

thanks for the feedback, it's good to know i'm on the right track :)
i think i will first try to finish reading on some books to get my
hands on some theory
and then i might go with your advice on starting a self created
project,
but i feel this is not going to be challenging enough as opposed to
getting a project's idea
from someone else because. like all humans, i will tend to make the
idea fit my way of thinking
even before thinking of a solution for it. But that's a great
suggestion !
Oh by the way, would you recommend any particular book to get me
easily on track.
thanks
 
S

steven acer

Applying UML and Patterns / Craig Larman
Design Patterns / Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Effective Java Programming Language Guide / Joshua Bloch

are some relevant titles.

Arne

Thank you too Arne for the suggestions,
i will sure look into those as well especially Josh Bloch book
i've heard a lot about it.
thanks
 
A

Arved Sandstrom

Applying UML and Patterns / Craig Larman
Design Patterns / Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Effective Java Programming Language Guide / Joshua Bloch

are some relevant titles.

Arne

Thank you too Arne for the suggestions,
i will sure look into those as well especially Josh Bloch book
i've heard a lot about it.
thanks

*********************************

As regards the GoF book ("Design Patterns") you actually won't do too badly
if you refer to http://en.wikipedia.org/wiki/Design_Patterns and
http://en.wikipedia.org/wiki/Design_pattern_(computer_science) The links
available from those two starting points cover the material in the book
quite well. I hate to take away from the book's authors, but they've sold
half a million copies already. The code examples are in C++ and Smalltalk
and this also is an issue for some.

I've got a copy myself...lent it out two years ago, and feel no need to get
it back. As the authors say themselves, it's not like they invented the
patterns - they named them. The major value of what they did, and it was
very valuable, was to introduce this common vocabulary. But once you know
that there *is* an AbstractFactory pattern, or a Command pattern, or a
Decorator pattern, and have an idea of what they're about, you don't much
need the book.

Just my opinion. I'm at the stage where I'm a bit jaundiced about
programming books. Back in the day I bought way too many that were fine
books but had limited shelf life...there might be only half a dozen now that
I ever look at. If I had to keep one it would be "Algorithms in C" by
Sedgewick.

AHS
 
A

Arved Sandstrom

[ SNIP ]
thanks for the feedback, it's good to know i'm on the right track :)
i think i will first try to finish reading on some books to get my
hands on some theory
and then i might go with your advice on starting a self created
project,
but i feel this is not going to be challenging enough as opposed to
getting a project's idea
from someone else because. like all humans, i will tend to make the
idea fit my way of thinking
even before thinking of a solution for it. But that's a great
suggestion !
Oh by the way, would you recommend any particular book to get me
easily on track.
thanks

***************************************

I might add, when you pick a project idea, go for something that's easy on
generated code (if you're using an IDE). You don't want your stuff cluttered
up for an initial foray into design. And based upon my own experience, you
don't have to worry about your own idea not being challenging enough.

As for books, I don't have a large number of them on actual software
engineering. One that I do have, and like, is "Software Engineering: A
Beginner's Guide" by Roger Pressman, 1988. I figure his main textbook on
software engineering would be worth looking at, but somebody else would have
to weigh in on that.

Getting a bit closer to the metal than that, it sounds like you already have
a decent book on OOP with UML. I've got "Designing Flexible Object-Oriented
Systems with UML" by Charles Richter, Macmillan Technical Publishing, 1999,
which is pretty good. For other programming approaches, and how you'd design
with them, like functional or logical, you'd almost want to go with main
references for flagship languages (like Clocksin & Mellish for Prolog, or
the well-known ones for Haskell).

I myself would spend a fair bit of time on database design theory too. I am
not a DBA so I won't make a book recommendation. Main thing is, designing
your data is so central to almost every application that it's worth becoming
very conversant with it. A good article is
http://www.simple-talk.com/sql/database-administration/ten-common-database-design-mistakes/.
If this makes you think a bit it's time well spent.

AHS
 
M

Martin Gregorie

Oh by the way, would you recommend any particular book to get me easily
on track.
Its important to design code so its readable, maintainable and testable.
The latter point is important: if you can't easily test all aspects of a
design at every level from the module to the complete system its
badly designed and may well turn out to be fatally flawed.

A book that covers all these points is "The Practise of Programming" by
Brian Kernighan and Rob Pike. It deals with Java, C and C++, which often
illustrates a point better than a single language can.

Documentation is important so, in Java, learn to write comments that make
readable Javadocs. In fact, write module specs in Java docs format since
a class is a module: write a large initial comment describing the class
as a whole and follow it with method descriptions and empty method
skeletons. Then, when and only when the module specs are finished and the
javadocs are readable, go back and expand the spec into runnable code
that's already fully documented.
And based upon my own
experience, you don't have to worry about your own idea not being
challenging enough.
Agreed. Consider writing a non-trivial game. Games programming teaches
you a lot because it touches on most aspects of programming. You could do
worse than tackling a text-based adventure game, but generalize it so the
game's scenario, characters, weapons etc. are loaded from some type of
database or XML file. IOW you have two programs to write: a program that
loads the database and runs the game and one that generates the game
database.
I myself would spend a fair bit of time on database design theory too. I
am not a DBA so I won't make a book recommendation.
I've done enough database design to have an opinion here. The essential
is to find a book that covers entity-relationship diagramming and the
process of normalizing entities. My preference would be for a book that
isn't locked to any particular methodology or toolset: if you understand
the underlying principles you can rapidly pick up any methodology or
design tools that a project may specify and you'll be able to work with
any database implementation.

I don't know any particular modern books that I'd recommend, but I have
copies of Chris Date's "Principles of Database Design" and "The SQL
Standard" on my shelf. The first will always be relevant, though the
latter has dated because it does deal with the specifics of an early SQL
standard. "Principles" prior to the 4th edition covered non-relational
databases: later editions don't, which I personally think is a pity but
others may disagree.
Main thing is,
designing your data is so central to almost every application that it's
worth becoming very conversant with it.
Spot on. Make sure you understand the data and the problem first, and
only then start code design.
 
M

Martin Gregorie

If I had to keep one it would be "Algorithms in C" by Sedgewick.
Yes, essential for any programmers library IMO.

I have the older Pascal book. It doesn't matter which version you have -
the code in them is well written and easily translated into any other
block structured language.

I also have a soft spot for Nicolas Wirth's
"Algorithms + data structures = programs", which covers similar ground,
though with more emphasis on the data structures.
 
T

Tom Anderson

Yes, essential for any programmers library IMO.

It is a classic. I learned a lot from it as an embryonic programmer.

I've never actually had the need to use much of it, but i'm still glad i
read it!

tom
 
B

Bo Vance

Martin said:
I've done enough database design to have an opinion here. The essential
is to find a book that covers entity-relationship diagramming and the
process of normalizing entities. My preference would be for a book that
isn't locked to any particular methodology or toolset: if you understand
the underlying principles you can rapidly pick up any methodology or
design tools that a project may specify and you'll be able to work with
any database implementation.

I don't know any particular modern books that I'd recommend, but I have
copies of Chris Date's "Principles of Database Design" and "The SQL
Standard" on my shelf. The first will always be relevant, though the
latter has dated because it does deal with the specifics of an early SQL
standard. "Principles" prior to the 4th edition covered non-relational
databases: later editions don't, which I personally think is a pity but
others may disagree.

FWIW,
_An Introduction to Database Systems_ 8th ed. C.J.Date 0-321-19784-4
has been well worth the purchase price. This is from my vantage as
a hobbyist and general enthusiast. Much read once and absorb, but
also I've found myself going back to it finding depth of treatment
that I missed on previous readings. The reference and bibliographic
notes are most excellent.

BV
 
M

Martin Gregorie

FWIW,
_An Introduction to Database Systems_ 8th ed. C.J.Date 0-321-19784-4 has
been well worth the purchase price. This is from my vantage as a
hobbyist and general enthusiast. Much read once and absorb, but also
I've found myself going back to it finding depth of treatment that I
missed on previous readings. The reference and bibliographic notes are
most excellent.
My mistake: "An Introduction to Database Systems" is the book I meant and
the SQL book's full title is "A Guide to the SQL Standard". These titles
got corrupted somewhere between my bookshelf and the keyboard.

Newcomers to database design may not have heard of Chris Date. He worked
at IBM with Ted Codd, who came up with the relational database concept,
and was one of the people introducing key concepts like prime and foreign
keys to Codd's original relational algrebra.
 
T

Tom Anderson

My mistake: "An Introduction to Database Systems" is the book I meant

I also concur with this choice! I read that book - the sixth edition, with
the funky comet on the cover - many years ago, and it's been the solid
foundation on which all my knowledge of and work with databases has been
built. That may not have been so solid, but i can't fault the foundation
for that!

tom
 
B

Bo Vance

steven said:
Hi, [snip]
If i read some other developer's logic or code i can understand it but
i always wonder how he got there.
I don't think like a developer yet, how do i learn to do so?

In addition to the excellent suggestions above. Perhaps you could
pick from the many large and respectable open source projects one that
captures your interest and follow along with the discussion on the
developers mailing lists. Many examples in all fields of interest.
One of my favorites, the Blender project. The Google Summer of Code
project may show the thinking of some excellent 'student' developers
projects.

BV
 

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

Staff online

Members online

Forum statistics

Threads
473,773
Messages
2,569,594
Members
45,117
Latest member
Matilda564
Top