General Development

What type of coder are you? – samw3

samw3

Member

Posts: 542
From: Toccoa, GA, USA
Registered: 08-15-2006
I've been thinking about the path I've taken over the years in programming, and the co-workers, friends and fellow coders I've met.

Here are some qualities of a coder.

Which apply to you?

  • Monolithic: This coder writes program as one long file of instructions like a cooking recipe.
  • Procedural: This coder breaks instructions down into sub-routines to simplify code and make it more readable.
  • POGE-ish: This coder does not over-analyze a program idea. They write code that works, and that's good enough.
  • Modular: This coder's sub-routines are generalized so to be re-used in future projects.
  • Object-Oriented: This coder's code and data are integrated into distinct objects to create "black boxes" of sort that always works as described.
  • Literate: This coder stretches beyond their few familiar languages learning to separate syntax from algorithm. They can read most any code no matter what the language.
  • Explorative: This coder explores new and fringe methodologies and applies them to their code (Aspect-oriented, Functional langs, Compiler compiling, etc.)
  • Architecting: This coder sees the program idea as a whole, then studies it, breaks it down and structures it into a well-formed design.
  • Low-level: This coder understands exactly how a computer works below the candy coated surface of a compiler and writes code there. i.e. Assembly, interrupts, self-modifying code, microcode, etc.
  • Patterned: This coder has discovered similar ways of doing things, even if the code produced has dramatically different functionality.
  • Refactoring: This coder can face major design changes without breaking a sweat. Their ability to agily modify code is enhanced by efficiency and elegance.
  • Zen: Here, the coder sees the program requirements and just knows the best design. The code they produce is functional and elegant. They only refactor for design changes or possibly for a performance tweak when porting their code to a new CPU architecture.

God Bless!

Sam Washburn

[This message has been edited by samw3 (edited July 31, 2007).]

jestermax

Member

Posts: 1064
From: Ontario, Canada
Registered: 06-21-2006
Thats a really neat list
I'd say for the most part I hover around:
-Literate: I can read pretty much any code, even languages i don't actually know.
-Object-Oriented: I like writing objects that clean up the overall design of my code. It makes it more logical and more reuseable.
-Architecting: I pretty much do that for a living and i love breaking down designs.
-Patterned: previous solutions can sometimes be reworked i find.
-Modular: i try to keep a stack of pseudocode for various algorithms on hand.
And occationally:
-Explorative: I don't do things just for the sake of doing them too often but here and there i try things like XP for kicks.


EDIT: seeing as other people are explaining themselves, i guess i will too.

[This message has been edited by jestermax (edited July 31, 2007).]

kenman

Member

Posts: 518
From: Janesville WI
Registered: 08-31-2006
quote:
Monolithic: This coder writes program as one long file of instructions like a cooking recipe.

This is my primary way of coding and doing almost everything in my life. I think I get this from old basic programing one thing at a time. I never understood subroutines until recently (last 5 years)


quote:
Modular: This coder's sub-routines are generalized so to be re-used in future projects..

I don't try to do this, but I find my self opening old projects to remember how I did things


quote:
Low-level: This coder understands exactly how a computer works below the candy coated surface of a compiler and writes code there. i.e. Assembly, interrupts, self-modifying code, microcode, etc..

I progammed a little in assembly language, just to make things happen. I get some of the low level language things, but I mostly just made my computer restart. Maybe there is a market for that

I dont think that many coders are purists, but a combo of things. I think another reason I am monolithic, is that is how music is played, from beggining to end.

------------------
Howdy all! Check out http://art.twobrotherssoftware.com/shs.html, my latest CD.

If you ain't in the forums, you in the againstums :)

Mene-Mene

Member

Posts: 1398
From: Fort Wayne, IN, USA
Registered: 10-23-2006
I'm not exactly sure what I am, but I know what I"m not.

Monolithic: Not much of a scripter, I use lots of classes and functions.
Literate: I have a bit of trouble understanding Low-level languages like C++ ASM, ect.
Low-Level: Definetly not.
Refactoring: Not that skilled.
Zen: I don't have that skill, or that thought process.

------------------
MM out-
Thought travels much faster than sound, it is better to think something twice, and say it once, than to think something once, and have to say it twice.
"Frogs and Fauns! The tournament!" - Professor Winneynoodle/HanClinto
I reserve the full right to change my views/theories at any time.

CPUFreak91

Member

Posts: 2337
From:
Registered: 02-01-2005
quote:
Originally posted by samw3:
I've been thinking about the path I've taken over the years in programming, and the co-workers, friends and fellow coders I've met.


Boy, I'm sure the paths will change as I get older and more experienced.

quote:

Which apply to you?


I'm
  • Procedural
  • POGE-ish
  • Modular
  • Object-Oriented
  • Literate
  • (I'm somewhat) Architecting
  • (I'm quite) Patterned

Hmm. Now that I've created that list, I'm pretty happy with me skills.

I'm a PPoMOLAP coder! (Procedural, Poge-ish, Modular, Object-oriented, Literate, Architecting, Patterned).

------------------
All Your Base Are Belong To Us!!! chown -r us ./base
"After three days without programming, life becomes meaningless.'' -- Tao of Programming Book 2

"Oh, bother," said the Borg. "We've assimilated Pooh."

"Socialism works great... if there are no people involved." -- Pastor David Ginter, Union Church of Guatemala.

My Programming and Hacker/Geek related Blog

Jari

Member

Posts: 1471
From: Helsinki, Finland
Registered: 03-11-2005
I'm long time Refactorer, off from the shame But Zen when I pray.

But I have had my lesson, thanks to God.

------------------
Psa 32:5 I acknowledged my sin unto thee, and mine iniquity have I not hid. I said, I will confess my transgressions unto the LORD; and thou forgavest the iniquity of my sin. Selah.

[VoHW] (Help needed) [Blog] (Contact) - Truedisciple (mp3)

ArchAngel

Member

Posts: 3450
From: SV, CA, USA
Registered: 01-29-2002
Object-Oriented: frankly, any other method is inferior.
Modular: Only makes sense.
Architecting: Only reason why I owned the Turing machine.

Patterned: this happens after a while.
Low-level: I can do this and I was pretty competent at Assembly, but I don't always see the point.
Literate: code pretty much looks the same. just need to know the functions.

------------------
"The generation of random numbers is too important to leave to chance."
Soterion Studios

bennythebear

Member

Posts: 1225
From: kentucky,usa
Registered: 12-13-2003
Procedural: This coder breaks instructions down into sub-routines to simplify code and make it more readable.

that's all i can do with my lack of focus, studying, and practicing...i'm such a newb...i suffer from long-term newbishness.

*with my little skill set i still show symptoms of being the architect type. i'm big on seeing the program as a whole, and then breaking it down into parts, and seeing how all the individual parts communicate/work together.

*edit
------------------
proverbs 17:28
Even a fool, when he holdeth his peace, is counted wise: and he that shutteth his lips is esteemed a man of understanding.

proverbs 25:7
open rebuke is better than secret love.

www.gfa.org - Gospel for Asia

www.persecution.com - Voice of the Martyrs

[This message has been edited by bennythebear (edited July 31, 2007).]

Matt Langley
Member

Posts: 247
From: Eugene, OR, USA
Registered: 08-31-2006
Object-Oriented: In the game dev/game engine dev industry there's not really an option
Literate: I can typically read code in any language and I feel fairly agile in programming in multiple languages
Architecting: This, to some extent, is also a somewhat must in the game engine dev industry

------------------
Matthew Langley
Lead Documentation Engineer
GarageGames

Lazarus

Member

Posts: 1668
From: USA
Registered: 06-06-2006
quote:
Originally posted by ArchAngel:
Object-Oriented: frankly, any other method is inferior.

So elitist... so wrong..

I'm probably just - Procedural, Modular.
Most of the time.

Tonnyx

Member

Posts: 140
From: Indiana, USA
Registered: 08-02-2005
I don't code much, but when I do, it's pretty PoGE.

------------------
"tonics"

CPUFreak91

Member

Posts: 2337
From:
Registered: 02-01-2005
I want to add Low-level to my list there, but I'll have to wait till I get a copy of Operating Systems Design and Implementation (by Andrew S Tanenbaum) and Understanding the Linux Kernel.

quote:
Originally posted by Lazarus:
So elitist... so wrong..


Elitist maybe, but he is right. OOP is the best
(To be honest anything that works best for you is the "right" way).

------------------
All Your Base Are Belong To Us!!! chown -r us ./base
"After three days without programming, life becomes meaningless.'' -- Tao of Programming Book 2

"Oh, bother," said the Borg. "We've assimilated Pooh."

"Socialism works great... if there are no people involved." -- Pastor David Ginter, Union Church of Guatemala.

My Programming and Hacker/Geek related Blog

jestermax

Member

Posts: 1064
From: Ontario, Canada
Registered: 06-21-2006
quote:
Originally posted by CPUFreak91:
I want to add Low-level to my list there, but I'll have to wait till I get a copy of Operating Systems Design and Implementation (by Andrew S Tanenbaum) and Understanding the Linux Kernel.

that's an excellent book. I have a few books on OS D&I and that is the best

Also, i'd like to add procedural to my selection However i'd like to clearify that i break problems into sections like the description says, but i more frequently use OOP.

(i didn't actually care that much about adding the procedural thing but i did't want to be a full spammer )

------------------
Visit my portfolio (and check out my projects):
www.JestermaxStudios.com

HanClinto

Administrator

Posts: 1828
From: Indiana
Registered: 10-11-2004
Nice list.

I'll agree, Tannenbaum is an excellent author. Having a degree in computer engineering, I've had to learn more about the low-level computer things than I would if I just got a computer science degree. Still, I don't know that I live in that area -- I wouldn't really call myself as someone who works much in there.

I try to be Architecting, that's one of my biggest things I've been working on lately.
I try to be Literate, but I think to be purely so can ignore the language-specific good things that various languages have to offer, and we can ignore them to our detriment (coroutines, in-line regex, dynamic code creation/execution, etc).
As far as my method of programming, I have a hard time settling for POGE. I think my style of programming is an ordered process --
I write my code Procedural first (even if it's only in pseudocode), and I then refactor/break it up into Modular / Object-Oriented. I summed up my opinion of OOP in another thread earlier this year.

quote:
The difference between object-oriented and procedural programming:

Procedural: shoot(bullet, foot);
OOP: bullet.shoot(foot);

If you don't know how to program, having the bullet know how to shoot itself won't help.



OOP is nice, but much of the world is still written in C, and it's good to know how to write good, modular code that isn't shoehorned into an OOP model.

--clint

[This message has been edited by HanClinto (edited August 01, 2007).]

ArchAngel

Member

Posts: 3450
From: SV, CA, USA
Registered: 01-29-2002
quote:
Elitist maybe, but he is right. OOP is the best
(To be honest anything that works best for you is the "right" way).


actually, one of the strengths of OOP isn't what's right for you, but what's right for the team.
Object Oriented code is packaged neatly and intuitively, so that any member of the team can look at the documentation, know what each function does and use it properly (along with ease of debugging).
Spaghetti code is just sloppy, hard to read and hard to debug.

------------------
"The generation of random numbers is too important to leave to chance."
Soterion Studios

CPUFreak91

Member

Posts: 2337
From:
Registered: 02-01-2005
quote:
Originally posted by ArchAngel:
actually, one of the strengths of OOP isn't what's right for you, but what's right for the team.


I was addressing the personal one-person aspect. I never thought of it's usefulness from a team-based perspective.

------------------
All Your Base Are Belong To Us!!! chown -r us ./base
"After three days without programming, life becomes meaningless.'' -- Tao of Programming Book 2

"Oh, bother," said the Borg. "We've assimilated Pooh."

"Socialism works great... if there are no people involved." -- Pastor David Ginter, Union Church of Guatemala.

My Programming and Hacker/Geek related Blog

steveth45

Member

Posts: 536
From: Eugene, OR, USA
Registered: 08-10-2005
Procedural: Yep, if a function/method/procedure get's out of hand, I break it up into tasty morsels. It's the only way to roll.

POGE: There's a certain point you get to in a game project, be it a speed game project, or commercial with deadlines, that you have to just write code that works. Sometimes this is because you spent too much time over-engineering your code in the beginning, instead of getting it _done_.

Modular: Occasionally I'll factor some method into a more generalized form that can be reused.

Object-Oriented: The only way to roll, but it is often overdone. For example, pointless extra levels of inheritance: GOD::VOID::SPACE::MATTER::OBJECT::ANIMAL::PRIMATE::HUMAN::CHARACTER::MALE::NPC. You're not rebuilding the universe from scratch. I used to think OOP was a religion, but I'm starting to think it's a cult. The amount of reusable code that actually gets reused is often so small that it doesn't justify the extra effort.

Literate: I enjoy dabbling in various languages and scripts.

Low-level: If you don't know what opcodes and registers are, then you ain't a programmer.

Patterned: There are plenty of well-defined patterns in game programming. Using them is smart.

------------------
+---------+
|steveth45|
+---------+

samw3

Member

Posts: 542
From: Toccoa, GA, USA
Registered: 08-15-2006
quote:
what's right for the team

He's right... mostly. OOP encourages encapsulation and loose coupling which is the ideal in modularization. It is also brings a concreteness to the otherwise abstract wold of programming. However, a good modular programmer can accomplish the same thing without using OOP. But it normally require a bit more thought and a lot more function parameters.

Also, Thanks for all the replies! Programming is a multi-faceted domain and it's fun to see people's angles and bents.

I particularly liked kenman's comment about being monolithic (normally a bad trait for all except the "cowboy coder"). However, I've never looked at coding like a performance. Interesting insight. Btw, with music, I'm more of a composer, and my songs are "refactored" many times before the final result.

Anyways, here are my qualities:

Object-Oriented - I work in it so much that its the first thing that I think about now. I also dabble with microcontrollers and those definitely require monolithic/procedural coding styles. i.e. 2KB of program space, 363 bytes(that's right, bytes) of RAM.

Literate - I really believe this skill is a must for the modern programmer. Have you ever tried Google CodeSearch? I think reading code there can boost your literacy. If you've got some time to blow, type in anything and see what pops up, and then try to figure out what it does.

Architecting - As a project manager, this is a must. It seems like a waste of time at first, but in the end the whole team codes a lot faster. However, I must confess that this is not an inherent aspect of my unorganized nature. On personal projects I would rather sit down at a blank canvas and code from scratch.

Patterned - I guess this has just come with the years. But now when I see or hear design requirements, I generally have a pattern to apply to it initially.

Refactoring - I'm fair in this area, the only thing I don't like is the tedium. But modern tools like eclipse (I do a *lot* of java coding) really enhance this side of me. I really like elegant code.

Used to be Low-level, but technology changed too quickly and I lost it.
Used to be Explorative, I'm getting old and I start asking questions like "Why would anyone in their right mind want to learn/use oCamel or Lisp?!?" (I know there are reasons)

Thanks again!

God Bless!

------------------
Sam Washburn

PointOfLight

Member

Posts: 60
From: Indiana, USA
Registered: 11-26-2001
Monolithic: Fortunately, no, but I have worked with code written this way. Tends to be really bloated, since lots of functionality gets repeated needlessly.

Procedural: Yep.

POGE-ish: This is pretty much required where I work.

Modular: Depends on the project and language. I've found this to be almost counter-productive with some languages, though you'd think it wouldn't be.

Object-Oriented: This is where I'd like to be, and sometimes I get there.

Literate: I think someone else brought it up, but this is almost a necessity today. Sadly, I know too many people that can't do this.

Explorative: Like to, but don't often have the time.

Architecting: Unfortunately I've never been really good at this.

Low-level: Should, but generally don't.

Patterned: To an extent.

Refactoring: Don't know about efficiency and elegance, but I can certainly go with the flow and modify things quickly when the need arises.

Zen: Eh, probably not so much.

------------------
Eric Pankoke
http://www.polsoftware.com

TwoBrothersSoftware

Member

Posts: 141
From: Janesville, Wi USA`
Registered: 08-05-2006
With a new language
# Modular: This coder's sub-routines are generalized so to be re-used in future projects.

With one I am familar with - for example I do alot with vbscript and VB.Net at work

# Modular: This coder's sub-routines are generalized so to be re-used in future projects.
# Explorative: This coder explores new and fringe methodologies and applies them to their code (Aspect-oriented, Functional langs, Compiler compiling, etc.)
# Refactoring: This coder can face major design changes without breaking a sweat. Their ability to agily modify code is enhanced by efficiency and elegance.
# Zen: Here, the coder sees the program requirements and just knows the best design. The code they produce is functional and elegant. They only refactor for design changes or possibly for a performance tweak when porting their code to a new CPU architecture.

While I work in customer service - I have been allowed to create vbscript macros for the interface to the mainframe. It's gone well - can document saving the department 130+ hours a month, and they are actually looking at hiring a 3rd party training company that we use to teach others in the company what I do (I had to send lots of code examples today it was pretty cool)

WalkMan
Junior Member

Posts: 5
From: San Antonio, TX, USA
Registered: 07-16-2007

I think I've actually used them all at one time or another. Most were used by evolving as a coder from beginner to master, others by choice.

One can never have too many tools in their coding toolbox.


Scott

CPUFreak91

Member

Posts: 2337
From:
Registered: 02-01-2005
I have an idea: I shall blog about what qualities I have used during the 2nd CCN Speed Game Competition on a nearly-daily basis. I'd be curious to see what the other coding contestants are using, if they're willing to take a few minutes to post here/elsewhere.

http://www.blog.cpufreak91.net/legends/?p=48

------------------
All Your Base Are Belong To Us!!! chown -r us ./base
"After three days without programming, life becomes meaningless.'' -- Tao of Programming Book 2

"Oh, bother," said the Borg. "We've assimilated Pooh."

"Socialism works great... if there are no people involved." -- Pastor David Ginter, Union Church of Guatemala.

My Programming and Hacker/Geek related Blog

[This message has been edited by CPUFreak91 (edited August 03, 2007).]