Hacker News new | ask | show | jobs
by Bahamut 4484 days ago
I've actually been down this route when I was a kid experimenting with making programs. I did not understand what was the point of functions - why not just copy/paste blocks of logic?

It wasn't something important to me for a long time since I did other stuff instead, but coming back to programming in an effort to make a career out of it, a lot of that stuff became instantly obvious & I felt foolish for not recognizing it in the first place.

3 comments

> It wasn't something important to me for a long time since I did other stuff instead, but coming back to programming in an effort to make a career out of it, a lot of that stuff became instantly obvious & I felt foolish for not recognizing it in the first place.

I think one of the key things experienced programmers finally get is that we never stop understanding that there are things which we are doing sub-optimally and can continue to be reflective and self-critical of that. How can I structure my code better? How can I solve this software development problem that seems to come up frequently?

And then as we solve them, the solutions seem so obvious we wonder why we didn't realize it sooner.

It's funny, as a kid I can remember thinking: "Right, everything has to go in the main function unless absolutely necessary, it will just be easier to read that way."

Nowadays, it's the exact opposite!

As a kid I wrote a few games using QBasic. I apparently didn't have a firm grasp on control flow because every call to a sub routine ended with a call to another subroutine; sometimes to a sub routine that was already called earlier in the stack. You win the game by beating it before crashing with a stack overflow.
Nah you just invented continuation passing style. You just needed tail recursion too, and you would be good to go ;)
My code changed in a similar way, however I recently devolved.

I've mostly worked with higher level languages, and recently delved back into C. I had forgotten what a complete pain in the ass it is to pass complex data structures around between functions.

I'm a bit ashamed to admit my functions got pretty damn beefy real quick.

Don't worry, you can do this in C# or Python as well. Just structure your small, gradually growing proof-of-concept and soon-to-be-finished-product program correctly. No classes! Or at the very least a few monolithic ones, which cannot be instantiated. Use static methods whenever possible. I have never ever ever done this.

(I am getting ready to write an essay titled "Confessions of a Shitty Programmer").

Try C++, join the dark side! In addition to chocolate chip cookies, we promise C++11 move semantics for returned objects/values. The cookies/cake might be a lie. :-)
I had to create a small ADO class for advanced C++ last year.

It was... terrifying.

&structure ... ?
> &structure

AFAIK, that's only a legal function signature in C++.

To the point of the question : when I wrote that, I was specifically thinking of 2-dimensional arrays, not structs per se.

I meant passing a pointer rather than a by-ref call (which is indeed C++ only).

i.e. void myfunc(thing* stuff) { return; }

int main() { thing stuff; myfunc(&stuff); }

Oh, totally agreed. What I had difficulty with, specifically, was passing around a struct that contained a multidimensional array of a size determined at runtime.

I'm sure the problems I had could be solved by either a full re-design (not really an option), or accomplished by someone with more C experience.

This sounds like the mammoth version of "sleeping on it", which has worked remarkably well for me.