a thoughtful web.
Good ideas and conversation. No ads, no tracking.   Login or Take a Tour!
comment by thundara

Narrower. What do you want to learn?

"How do I design the flow of a program?"

"How do I make a shiny iOS / OS X app?"

"What are hash tables and why do I care?"

"What are algorithms and why do I care?" / "What is Big-O and why do I care?"

"Screw it, how do I do X in <language>?"

Different answers solve different problems. Getting a fancy interface that you can show off to a director is a separate path from knowing the basics of scripting in a terminal to solve menial daily tasks or just gaining the programmer mindset. They require different guns, too.

(But honestly, most people are pretty solid starting with the python tutorial, an open interpreter, and a definitive small problem that they want to solve)

kleinbl00  ·  3684 days ago  ·  link  ·  

Okay, that's a good set of questions. the thought process is like this:

I really like this program but it hasn't been supported in years and while the developer will still take your money, he won't answer your questions. I'd like to make something like that work but I have no idea how.

I know that it probably runs something like this program but I don't have the first fucking clue how to compile it. I downloaded XCode to make a run at it but I failed miserably... and now every time I run software update I have four gigs to update on a program that I don't even vaguely understand.

I'm also pretty sure I could get that data to talk to Celestia but celestia hasn't been updated either. For that matter, I'd love to be able to do an overlay of any of that data with this program because I know the developer embeds the ISS in their overlays if you tell it to. I just want to change the ISS to an arbitrary satellite that I have the TLE for but I don't even know what I'm looking for.

For that matter, I'd love to take the data from this and overlay it over all the rest... or shit, any and all of this data and overlay it over Google Earth. I have a reasonable understanding of the underpinnings of all this shit yet I lack the first clue where to start. For that matter, my NAS ate all my MP3s and my Mini server hasn't been talking to Time Machine in the correct language for months so in order to restore 300GB of music I'm forced to mutter incantations into the terminal window with about as much understanding of what I'm doing as a Cargo Cult member has of Latin.

My wants and needs are top down - "I know I can do this and I know the tools necessary to do it are just out of my grasp." I can see the data, I can see the transformations, yet I just don't have the basis of knowledge to wrap my head and hands around it.

Do you understand?

user-inactivated  ·  3684 days ago  ·  link  ·  

    I really like this program but it hasn't been supported in years and while the developer will still take your money, he won't answer your questions. I'd like to make something like that work but I have no idea how.

Writing an application like that is almost certainly an overly ambitious first project. If you really want to try it, though, here goes. For GIS stuff I second veen's recommendation of Python, or PostGIS. You will want to learn SQL anyway if you're dealing with largish datasets, and in GIS you are. The python docs are a fine introduction to the language if you already know a little (knowing Pascal already is at least a little). I don't know an introduction to SQL that doesn't suck. You'll want GDAL. GIS: A Computing Perspective is a good introduction to GIS, 3D Engine Design for Virtual Globes would probably be helpful for a project like this (caveat: I've read the latter, but not tried to implement anything from it. Google Earth serves my needs.) You probably want a good introduction to graphics programming too, but I'm not familiar with any written since using programmable pipelines became mandatory rather than an advanced feature. Getting started with graphics is going to be a lot harder now than it was when I did it, which wasn't all that long ago.

If you're happy just overlaying over GoogleEarth, KML is ugly but well documented, and saves you from actually having to draw your globes. Then you just need to slurp up the data you want and spew it out into a KML document. Python is excellent for that sort of thing. GDAL and the xml.dom.minidom module will do most of the work for you.

    For that matter, my NAS ate all my MP3s and my Mini server hasn't been talking to Time Machine in the correct language for months so in order to restore 300GB of music I'm forced to mutter incantations into the terminal window with about as much understanding of what I'm doing as a Cargo Cult member has of Latin.

The Unix and Linux System Administration Handbook, by the late great Evi Nemeth. Between it and the man pages (which will be less unhelpful after reading it) you should be able to make sense of whatever blog posts full of incantations you find. And then realize how many blog posts full of incantations are cargo culting themselves.

kleinbl00  ·  3684 days ago  ·  link  ·  

    Writing an application like that is almost certainly an overly ambitious first project.

No doubt. The goal wasn't to say "I feel like tackling these projects" but to say "these are the things in my life that make me regret my paucity of programming skillz."

So it sounds like I need to dip my toes in Python and perhaps buy the Nemeth book. Amazon sez you can rent it; first I've seen that.


user-inactivated  ·  3684 days ago  ·  link  ·  

"Overly ambitious" doesn't necessarily mean not worth playing with. Generally, the only thing a failed software project costs you is time, and you'll probably learn a lot about the problem while failing to solve it, so if you want to learn more about a problem and have the time to burn, trying an overly ambitious project can be a good idea. You just don't want to do it expecting to get something that works out of it.

    Amazon sez you can rent it; first I've seen that

They do it with textbooks, technical books and most books from academic publishers. I think they're trying to compete with university bookstores for students who would usually sell their books back at the end of the semester.

thundara  ·  3684 days ago  ·  link  ·  

Yep yep. What you are asking to do requires a fair bit of knowledge from a number of domains:

1) Program flow: if, while, for, function calls... You'll learn all this in pretty much any "intro to language X". Start here, since the basics are common to any language, even if the syntax differs.

2) Data structures (& algorithms): How do you represent that the satellite data in a way that uses computer resources efficiently? The answer to this question will be relatively simple in your case, but knowing the limitations of a hash table vs. a linked list vs. binary tree takes a small amount of learning.

This book us usually recommended for the subject, but it might be overkill in your case. Still, understanding what "Big-O" is will take you a long way in programming. And knowing how to get O(n) instead of O(n!) means the difference between taking a second to load and finishing a task after the heat death of the universe using more memory than there are atoms in a galaxy.

3) UI Design: I'm shite at this, so ask someone else for resource recommendations. If you figure out how to strap your program on top of another tool, like Google Earth, it might be unnecessary. Maybe OP's link will help, but I can't vet it.

4) APIs: How do you issue calls to retrieve your data? What format does it come in? How do you then tell OS X / GTK / Google Earth to display your data? This is usually as domain-specific as things get. Each library / service has their own way of doing things. Sometimes their documentation / examples suck, sometimes it doesn't. If the satellite data is presented as "JSON through a RESTful API", that'll mean learning one library for retrieving the data and another to manipulate it.

5) Nitty gritty: "How do you get it to compile? To run? To be distributable?" Again, Python is different from Objective C is different from C is different from Java. Decently designed programs will give you a list of dependencies and at most three commands to build and install / run. Having an IDE around can make this as easy as hitting the build hotkey for XCode / NetBeans / Eclipse / ....

6) Behind the scenes: Depending on how far you want to go with your project, it's often valuable to learn a bit of software engineering: how to use a version control system, how to write software tests, and how to use a command line. It won't affect your code functioning, but it helps to keep track of changes over time and see where things failed when you decide your weekend's work was all shite.

- Popular VCSs are hg and git. The basics can be learned in half an hour, and both have UI tools (TortoiseHg + GitHub's App) and web services (Bitbucket and GitHub) to make your life easier. Most everyone has an opinion which one is better, but, honestly, they are extremely similar and either will suit your purposes. At best, it'll give you a detailed history of who made each change to your program. At worst, it'll give you a bug tracker.

- Tests break down into unit, integration, and functional tests, and are pretty much a list of example calls to parts of your program along with expected outputs at various levels of granularity. Every modern language has support for them, and they turn: "My program isn't working" into "get_satellite_timezone is crashing over Antarctica".

- Command lines are incredibly useful in debugging, but not 100% necessary if you pick a decent IDE / language. I can understand the aversion to esoteric file-system manipulation tools, but anything you might need for programming purposes can be fit on a single A9 cheat sheet.


Hope that helps, maybe a bit long-winded, and maybe overkill, but pick and choose what seems useful / relevant.

insomniasexx  ·  3683 days ago  ·  link  ·  

    3) UI Design

Oh! I've got this.


1. "The Visual Display of Quantitative Information" - fucking fantastic book

2. Everyone says "Don't Make Me Think" but I didn't find much new/useful from this books. Most is covered by the basic UI blogs.

3. About Face: The Essentials of User Interface Design - just finished this one. The basics. Great.

I prefer blogs though.

Here's my list:

1. Nielsen Norman Group

2. Weekly newsletters about general design / ux - full of modern information that is 100% applicable to today

3. Pattern Tap - this is a reference of how other people do certain things like forms or top navigations etc.

4. The Hipper Element - mostly pulls exceptional stories from other blogs. Great. Also his UX Crash Course is so good.

5. Tuts+ - basically will teach you anything about anything. They recently broke their tutorials down into categories like design and code which is great. This is one of my favorite things in my RSS. One moment I'll be reading about Russia, the next I'll be knee deep in creating a knight in shiny armor with illustrator.

6. ia blog

7. UX Apprentice

here's the full list. 1 2 3

Here's another good thread from Quora: http://www.quora.com/Which-books-can-help-me-become-well-versed-in-UI-UX-and-usability-standards

thundara  ·  3683 days ago  ·  link  ·  

Links all appreciated. Tangential complaint, hubski notifications on comments have stopped working for me. I had to manually go into this thread to see that there were replies (Happened the other day, too).

insomniasexx  ·  3683 days ago  ·  link  ·  

Both your email notifs and orange hub wheel notifs?

thundara  ·  3682 days ago  ·  link  ·  

Turned off email, but now it's suddenly working, got hub wheel notification for this entire thread between that post and now.

insomniasexx  ·  3682 days ago  ·  link  ·  

Interesting. Maybe it was just hungover from a long night and is playing catchup now. :P

kleinbl00  ·  3684 days ago  ·  link  ·  

Helpful. I'm seeing lots of python talk. That's a start. Perhaps to improve the perspective, I can look at your lists and go 'yup. recognize the language. Passing familiarity with all that. Zero confidence in implementation.'

That whole "known knowns" and "known unknowns" and "unknown unknowns" thing? Programming is a "known unknown" for me.

thundara  ·  3683 days ago  ·  link  ·  

It's a lovely language that's easy to read / write (Originally described as "executable pseudocode", has a large range of freely available libraries, and hides much of the nitty-gritty from people who don't want to add: "How to compile" and "How to manage memory" to the list of things to learn.

On the other hand, benchmark-to-benchmark, it's interpreter isn't the faster in the universe, it doesn't do multiprocessing very well, and there is the current divide in the versioning. When you've hit a performance wall, the language designer's advice is "re-write it in C".

user-inactivated  ·  3684 days ago  ·  link  ·  

I can in no way say that I am an expert on programming at all. Not even close. That's my disclaimer.

Based on your last paragraph, I guess my only advice would be to start with smaller building blocks. I'll just use myself as an example.

I use [this website](tane.us/ac/nl.html) a lot. One day I said to myself - this would be a cool Android app. I've never built an app in my life, but I figured I could start here. Having a small problem you want to solve is a good start.

So, problem 1: What language is Android even developed in? Java. So I need to create a Java environment. I get Eclipse. Cool.

Problem 2: What are the basics of Android development? There's a guide for that, written by Google. Thorough and helpful, I read it before doing anything else.

Problem 3: How do I just make a tiny, basic app that just, I dunno, displays text? Google has me covered there, too.

Problem 4: What exactly would an app based on that website entail? So I drew out a plan. The basics would be:

It needs buttons.

It needs to run in the background.

It needs to change its state every hour.

It needs music added to it, on repeat.

So on and so forth. Then each of those little things, I try to master, before moving on to the next little thing.

After that small little project, do another, and another. The basis here is just learning new skills that can be applied to the overall goal that you have for your "dream program." Widening that pool of what you can do in a particular language is what causes you to gain more experience as a programmer.

Hopefully that's a little helpful.

Also, StackOverflow might be a nice place to start asking questions.

kleinbl00  ·  3684 days ago  ·  link  ·  

My basic problem is I do not feel that I have the basis of knowledge to start asking questions. I need like a peachpit book.