HN user

waynecolvin

142 karma

Newbie poking around. Hello.

Posts8
Comments48
View on HN

I believe ktRolster may be refering to "Procedural Abstration". The term is used in SICP [1] (the Wizard Book using scheme, previously freshman programming text at MIT).

Abstration can take many forms. But can often be described as "seperating things that change and/or repeat from those that don't", or something like that.

The last paragraph may be a joke, or based on one of the Principles in the O'Reilly Design Patterns [2] book.

[1] https://mitpress.mit.edu/sicp/ [2] http://shop.oreilly.com/product/mobile/9780596007126.do

Algorithms 9 years ago

You might be complaining about students being taught Python and it becoming their "blub" language. We all start somewhere, and you can indeed go far with Python in some fields. It's popular with scientists for instance.

Recommended reading: https://www.reddit.com/r/programming/comments/9nipa/joel_on_... ( https://www.joelonsoftware.com/items/2009/09/23.html )

http://www.paulgraham.com/avg.html

http://www.lessonsoffailure.com/tag/paul-graham/ <-- note "flamewar" in the title!

Algorithms 9 years ago

It can be a terrible filter, but credentialism fits in well with bureaucratic environments. :/

Algorithms 9 years ago

True. But before the days of Structured Programming widespread understanding of algorithms was hoped to lead to a professional Software Engineering field.

The idea of "Software Engineering" was born with the Software Crisis report in the 1960's.

Later on practicing SE's would study things like Design Patterns so things evolved over time.

EDIT: Software Engineers probably should know some relevant basics, but programmers could never come up with a "body of knowledge" like real engineers have.

It all depends what you work on and what new developments keep coming out...

A real man might take responsibility, but if that ever becomes too visible you will be made the dunce if not scapegoat. Maybe only the successful people had the clout to pull it off. :/

Admitting mistakes to move on, failing fast, should prevent prolonging arguements though (if you can pull it off).

Table lookup is a common solution when a FPU isn't available and speed is a higher priority than accuracy.

I've actually used formulas for trig functions before with IEEE double floating-point until the accuracy didn't improve.

(think it was a continued fraction or or some other technique I didn't understand, didn't -lm or something for builtin functions and worked around it lol...)

It was very slow! Makes your computer's fan spin faster, even changes the smell in the room while grinding away!

Are you sure there weren't some sort of recruitment effort with at least some of those guys... Though you do see some tech pages out there, maybe because of Hangouts? shrug

I didn't know Tim O'Reilly was on G+ but ALL these recent posts are pop-politics and ugly at that! I thought you were referring to all Google services being tied in.

You are describing "generalization". Lookup Tables (LUT) can still be a valid technique if the problem space is small enough.

If you use a table for trigonometry functions then interpolation is generally used... So it doesn't have to be all-or-nothing.

Compression generally works by removing redundancy via some means or another according to some scheme... But compressed data can take up more space if it goes against the grain (i.e. RLE when the repeated byte is the same as escape byte). Randon number generators with simple seeds (not a hidden entropy pool) can be thought of as disrupting simple patterns in a sequence.

EDIT: just thought of this. http://mathworld.wolfram.com/Prime-GeneratingPolynomial.html

Those LUT's have implied indexing internally, I suspect something akin to indexing is essential.

Logic functions can be composed using any one of: NAND, NOR, XOR, IMPLY, or other units like full-adders etc.

All memory depends on some form of persistance and/or refreshing.

Sometimes this is a physical phenomenon like magnetism or electrical compatence or after-glow in a willian's tube. Short-lived effects need to be refreshed.

Sometimes there is a feedback loop that continuously sustains latching, such as flip-flops.

Magnetic core memory could be less transient than say, a mercury delay line, but needed to be rewriten after being read.

But regarding your question, I think so. If it is possible to impliment one with the other (but memory usually has internal indexing).

I suspect it would be difficult (impossible?) without relative position addressing modes and/or other tricks. A conventional stack would need some way to access an offset away from the base, but perhaps you could use self-modifying code. Perhaps relative from current position like brainfk.

All general computation needs either a direct or convoluted means of achieving conditions too. A tricky formula exploiting abs(x) could be used to produce {0, 1} but...

I first seriously(?) learned how to code by finding a used Pascal book and reading it thoroughly. That was some time after getting my first computer and not knowing where to find a compiler! (I'm not counting forgotten Logo from summer class long ago or using elaborate triggers in a MUD.) I had serious learning problems getting far past that unguided. Finally learning C from some lecture notes was a growth spurt though I had looked at some C before that. Trying to calculate the fewest coins to add up to a sum and finding optimal new coin took like a couple weeks! LOL

There are many dialects of BASIC and many old ones on old micro-computers had poor features like GOTO or 2-character variable names...

Nevertheless, for as long as you do grow out of it and move on... Why not! Don't forget to move on, that's important.

It's possible to find really old books with like scientific/financial calculations in BASIC, but don't get under the illusion that you can easily do anything "practical". For play/practice, go ahead! But please do move on it you keep at it.

Python should be a reasonable first language but you might have need for others later. Use a simpler editor at first so you can concentrate on coding, not working the editor itself. The editor should be able to show line numbers so when your program reports errors on a line number you can find it. Syntax highlighting is a plus. Code most everyday (take some breaks) but please think your problem through before committing to a solution! Be sure to read code from others to pick up tips/style. Work through some books or something. You don't have to be a top-notch expert all at once. I think the Perl community says it's okay to just use the parts of the language you understand until you learn more! (However becoming fluent in gritty details will make things smoother when you don't need to look up mechanics as often. A musician needs to know their scales.) Try rewriting old projects when you get better. That implies saving your work somehow. Be sure to learn how to create modular libraries and to use libraries written by others! You can't put everything into one source file unless it's something simple and there's useful functionality to be found.

I don't think these guidelines would apply the same way at a larger established company instead of a startup. Skillset would have comparably more interest to a company already invested in legacy systems which wouldn't be the case with a start-up.