Just looked up Delphi and I'm not sure if I got it right - are you guys talking about the Embarcadero Delphi IDE, which main programming language is Object Pascal?
Just looked up Delphi and I'm not sure if I got it right - are you guys talking about the Embarcadero Delphi IDE, which main programming language is Object Pascal?
Two tips that have helped me (well, I'm not really a pure programmer, but I do a fair amount of scripting and even some web apps at work):
1.) Start with a language that seems nice to you (unless you're more or less forced into one language). For me, my two favorites are Python and Ruby.
When you become fairly proficient in one language, it's no big deal to move to a different one, so you can't really choose a "wrong direction" so to speak. The skills you gain in one language will almost always apply to other languages as well, because programming and software engineering are skills which are fairly independent of particular languages.
It also helps to broaden your horizon by knowing several different languages. Languages are like tools: if you pick the right one for the task at hand, you'll have it easier.
2.) Write an own program/script/whatever that you think is a good idea to have for yourself. Maybe a tool that helps you do a task you often do. Programming is often about automating things or making things easier. It's a great feeling when you find an opportunity and do this for yourself. Also, if you have one tool that you frequently use but you wish that it did things slightly differently or with an added feature. Of course you should be reasonable in your goals - don't try to write a better browser for example. But there's a lot to gain from writing small tools, and reading code from small tools. Or small games, if you're more into that. But games often carry the additional difficulty of requiring art/design/sound work as well.
Having the same problem as the op, in a Comp Sci class at high school (senior year) which is orientated around Java. We just moved on to gridworld, which after reading it's from the college board, is making me wonder why we are doing it. Adding to the fact that the Comp Sci teacher from last year quit and moved to a job at Shell, the new teacher has no knowledge of Java or Gridworld whatsoever (He knows other languages though, I think). Has just been a very demotivating experience so far, are there any tips to working with gridworld, or learning Java? Since it's basically self teach in class at this point because of the teacher.
If you're wanting ANY sort of GUI application, then Free Pascal/FPC is a good choice for it doesn't cost anything. It creates the standard "grey interface" applications you probably use every day (i'm not sure if it has skinning support). If you want to compile beyond Windows x86 and x64, you'll also want to look at FPC. If you're willing to sink some cash into it, Firemonkey provides Windows and OS X support but it's only available with Delphi (and not with FPC). Firemonkey is absolutely fantastic as a framework, can compile to Windows and OS X with the same code and is much more about presenting information and making responsive interfaces. If you prefer to be creative with your design, then i can't do anything but recommend it. Almost all of my applications created since January have been made in it for the simple fact i can make my interface much more user friendly and do things i couldn't otherwise.
I'd recommend that if you do choose to go with Delphi/VCL ("Grey Interfaces") or FPC, that you stick with it until you're confident. Although Firemonkey is very similar in it's syntax and such, there are a few key differences related to properties. For example, with VCL and FPC, labels and such have a "Caption" property that is used to specify what text the label should display. With Firemonkey, it's the "Text" property you have to work with. This change makes "Typecasting" easier (typecasting is a medium-intermediate subject, but one that will change the way you code and it's not overly difficult either).
However, if cost is an issue (i totally understand that it might be), WPF with C# would be a suitable choice. You can get the free express edition of Visual Studio which i believe allows you to create WPF applications. The interfaces are much similarly described to those of Firemonkey, but it's a different language (Delphi Pascal vs C#). This is a suitable "compromise" and while i've never personally developed in it, i've not read many major bad points about it. One benefit Firemonkey has is that you can create "hybrid components" via styling. That's one reason i use it, but i'll admit that i've come to rely on it and it's become somewhat annoying that i'm unwilling to invest the time to move over to C# because of this dependency.
If you've already got a background in Python, keep on with it. There's very few languages that are "old and worthless" these days. The major contenders are Java, C#, C++, Delphi/Object Pascal, and Python. Each of them can do the same basic things, but what separates them is ease of understanding (this is almost entirely down to the person, not the language) and efficiency. Efficiency is only a major concern if you're doing the advanced stuff, and for the majority of applications, you don't need to worry.
Best advice I can give is read the textbook if your teacher sucks.
Also, we don't have a textbook, just a AP Comp Sci review book we can ask for.
So, internet manuals during class and at home, time to hit them up heh.
I started off with vb and currently learning c#
I'm taking a course in Java right now, the second of the two prerequisites for almost all the rest of the CSC courses. The first class was 100% console based, and this second one is about 50/50 console/GUI. Maybe it's different in C++ (I didn't have any programming experience prior to the first course) but from what our professor tells us, Java is mainly geared toward enterprise-level systems, and aren't really meant to have fancy GUIs.
Anyway, the point of the classes isn't to teach Java whether it be console or GUI, it's to teach object-oriented and software engineering concepts like inheritence, polymorphism, basic data structures, some design patterns, etc. I find it to be a lot of fun. It's more about solving the puzzle than doing a lot of typing.
If your teacher hasn't articulated that clear enough, then yeah there definitely is something wrong. If all else fails, take the same courses at a Community College through a program with your school (and obviously have it count towards college credits, I'm sure your school has some sort of system for that) to learn it better. If you've got a bad teacher who isn't teaching this stuff well early on, you're going to have a rough time with the more advanced stuff.
Being a nerdy kind of type a bit, I have tried to get into programming a bit. God knows how many times I've tried to learn HTML, Visual basic (.NET), small in-game "programming" or macroing, I've read books, learned some and now, I can't remember much of it at all. Some of it is useful still, I can manage my way easier around a source code than if I had not spend some time on it and done some small, very basic programming. I have tried to make a map in WC3 and tried making a simple game in Game Maker, but it all quickly stalls and get closed down because I think "this isn't fun" or "I don't like it" or "I don't care". I would certainly like to be able to program more, but I'm not because I just don't care at the end of the day. I just don't like it. In fact, I probably more verge on the side of hate than love on that scale towards programming. It's just boring.
I would much rather game along happily and merrily and not know much (or than very basic stuff I have managed to pick up with also having a programmer as dad) about programming or its derivates. Yes, it takes some of my geek pride away. I have tried to be in Maya and 3D Studio Max, but I can't do it. It's not me.
EDIT: If you know you like programming then I obviously cannot be of any help further because well, I don't know anything about it. Life is also about trying different things and finding out what you like and don't like, and if when you ask yourself, "what do you love?" programming doesn't come up then it probably won't be for you. We all got our own likes and interests to wrestle with and the grass may look greener on the other side and we want to be appreciated for the the talents that we don't got instead of the ones we got, but if you don't like something, or maybe even love something, then working your life in it will be a downright torture and you will, hopefully, find something else. Everyone has an interest one way or the other, but maybe one just hasn't recognized it yet or has found something that has awoken that interest. In life, we also just as much engage ourselves in realms that approach our interests and that match with our personalities and skills, kind of harboring around a core match.
F.ex. some of the people I went with to a techinical high school had been making games since they were kids and/or would program in their spare time. You can see they like it because they enjoy the activity and not whether the game looks and plays like a bad dos game or whether their application in Excel is pretty much useless for anyone else. I just want to game.
Last edited by Tenver; 2012-11-13 at 01:39 AM.
But yeah, I will most definitely be taking this class again when I get to college, I need to know the basics or else it'll screw everything else up from then on.
Thanks again for the detailed information! Appreciate it.
I think that's a problem with how programming is taught these days. We no longer have a "hypercard" or some equivelent that lets you quickly get into applications that that you might actually use.I know I need to learn the basics, but these console applications demotivate me something so extreme.
It could be that you don't. I've been programming for a long ass time - I started with console programming but I'm not really convinced it's the best way to go. On the other hand I think the two things that made me a better programmer were learning Ruby ~10 years ago and then the time I spent working on telecom hardware - both were what you'd consider console programming.So now I'm wondering, is programming what I really want to do? I read all about the programmers getting into it as fast as they started with the consoles
I think that's important. Finding - projects where you actually want to use the end result.I went on to bigger and better things, but it all started with a single project...solve my algebra homework.
I suspect mine was about the same: maybe 80/20 math/programming. I actually liked the math.As a developer myself i hated the first 2 year of my uni, i had around 70-30 or even worse ratio between math / theory and actual programing.
What kind of math are we talking about? Right now I'm studying trigonometry and integrals.
- Differential equations
- Discreet math
- Linear algebra
- dynamical systems
- functional, numeric, etc. analysis
- complexity/game/graph/information theory
My first year had two sets of calculus which pretty much everyone did okay in (first year calc isn't hard if you took it in highschool).
It had two linear algebra courses. The first one wasn't particularly hard but it's a new way of thinking about math where you do everythig algorithmically. A lot of people struggle with it and it was a filter-class for my program (<50% of people passed) If you made it thorugh the first you'd probably do fine in the second.
The other filter class was discrete math (proofs, graphs, trees, and all that sort of thing) which was another course people struggled with.
After the first year the math stopped being a problem. I wouldn't say it was easy but they'd managed to get rid of anybody that couldn't work through it.
If you consider science and engineering part of math then I also studied fluid mechanics, circuts, classical and relativistic mechanics. If you could handle the pure-math courses then these weren't particularly hard.
For what it's worth: linear algebra is something that just keeps popping up. It's impossibly useful. It's pretty rare I'd use calculus or stats very often. Some of the higher level theoretical stuff (like graph theory or complexity theory) shows up quite a bit but you'll probably study that twice: once in math and then again in comp-sci as part of an algorithms course.By the way, when speaking of what kind of math I'm not speaking of game-related math, as said I want to make normal software (like, I dunno, Spotify), not game software.
Most high school programming courses are open to students who probably don't have the mathematical background to appreciate "computer science". The programming courses serve more as an introduction to doing neat things with a computer. They focus on syntax, maybe some basic code style, and that's about the end of it. Most highschool teachers probably didn't study programming in college and fewwer still have actual industry experience. Expecting a proper computer science education probably isn't reaosnable at that level (just like you can't really study psychology or engineering either).Ah ok, I thought it was for learning Java, since we haven't really gotten into some of the fundamentals of computer science, mainly been doing Java. So perhaps, there is something pretty damn wrong with the way the school is running it's Comp Sci program.
Hell even first year programming courses aren't really 'computer science' in any meaningful way (I've TA'd half a dozen of them). Mostly it's about undoing the damage done in highschool, dispelling misconceptions, and convincing you that programming is a distinct discipline with it's own rules and lexicon. They need to give you a certain shared background and a language to express your ideas with. It's just laying the groundwork for the second year. It's a lot like first year chemistry making you do a dozen titrations and lab reports for trivial nonsense to get you comfortable with what it means to do a lab and prepare a report. The science bit doesn't really start until you've made it through frosh chem. It's like earning a black belt or getting your race license: now you're ready to start the real training.
As said, math has it's place, but utility applications and such very rarely make use of it. I absolutely won't discount that as your knowledge and experience increases, you do indeed find more uses for it. It's just that i've found so very little reason to use any complex math. Maybe it's my approach to designing the UI first and "asking questions later" that has allowed me to work around the issues that might have otherwise prevented me from proceeding, but i've found so little use for math beyond the basics in my projects.
If i was designing something like Spotify (note: I've never used it, so i'm going on screenshots and descriptions alone), it'd be more focused on networking and ensuring that what your application displays is true to the results it returns. The majority of it would no doubt be JSON, so parsing it to the correct element would simply be a case of referencing it to an index (which isn't math at all).
Of course, when dealing with Algorithms, that's when you need to be careful and when it's all about math. Encryption and hashing are perfect examples. For those though, you can often get prewritten libraries that simplify it, meaning you can avoid nearly all, if not all, math equations.
I've not been to university, or even into further education for development, so it's all opinion. It's not conjecture per se, but i would warrant that the software i've released in the past will no doubt be credit that i've got some experience with development of utility applications. Perhaps one of my upcoming projects will change my perspective (and one of them in particular will make heavy use of maths, without a doubt) but right now, i can't really say that math plays a big part in development for me.
When I asked a computer science graduate who is now a code writer what to start with when learning to program, he recommended Python. He showed me how he could do exactly the same thing in Python as in C++, but with about a quarter of the code (and easier code too).
Intel i5 2500K (4.5 GHz) | Asus Z77 Sabertooth | 16GB Corsair Vengeance LP 1600MHz | Gigabyte Windforcex3 HD 7950 | Crucial M4 128GB | Crucial M550 256GB | Asus Xonar DGX | Samson SR 850 | Zalman ZM-Mic1 | Western Digital Caviar Black 2000GB | Noctua NH-U12P SE2 | Fractal Design Arc Midi | Corsair HX650
Former author of the TankSpot.com Protection Paladin guide
I suspect we'll just go back-and-forth here. I'll disagree and point to my background and you'll do the same.Of course, math is incredibly useful, but i wouldn't say it's really pitched in for utility except in a few circumstances. For example, the most complex math i've had to do with any of my projects to date (including cancelled ones and ones not announced or never released) was with calculating the angle of the dial in VTemp according to temperature (270 degrees max, 127 celsius max, 0 minimum temp, and the 0 angle was actually to the right side). That's an incredible simple calculation and entirely basic math. There was a multiplier and an offset, but that was to account for the GUI mode (D2D or GDI).
I grant you that there's a whole class of programmers that do just fine gluing together bits of code written by other people. That's an important job, there are a huge number of problems that can be solved that way, and recycling code is one mark of a good programmer. On the other hand there are a whole pile of problems that are much less approachable without a strong understanding of math. Think of all the topics where math is the lingua franca: physics, sociology, economics, engineering, biology, robotics, signal processing: if you understand math you can solve problems in those spaces with software without needing intimate knowledge of the field itself. One of maths best qualities is that it's a standardized cross-cultural interdisciplinary language that applies to nearly all of human endeavor.
I agree with your assertion that 'the more you know, the more you'll see it's useful". Maths are a powerful tool for expressing and investigating relationships between data. A tool well suited to that sort of work is going to be valuable to programmers because that's what so much of programming is all about. In the same way you can get buy without regular expressions, list comprehensions, recursion, or closures - you can get by without linear algebra, calculus, or discrete analysis. It might not be pretty, but you can do it.
On the other hand there are a bunch of problems where 'higher order' maths aren't useful, just as there are problems where recursion and regexp aren't very useful. I think you'll agree that having more tools is generally a good thing and that having too few is generally a bad thing. Ultimately our disagreement will come down to a question of opportunity cost: is the time spent mastering matrix multiplication better spent studying recursion?
I think if we continue this line of discussion it'll end up in a talk about the nature of university education or some other off topic diversion. I also think we'd end up at a bit of an impasse: we'd be arguing opinion without any real way to resolve the dispute.
For the OP. If you're finding 'console' applications boring consider finding a better way to learn. You might have more fun learning with arduino. You can get started for < $50 and it gives you a whole bunch of neat projects you can work through. I find there's a lot to be said for the motivation you can get hacking on hardware.
I'm not going to go very deep here. Just one simple thing.
You won't regret it. Get Visual Studio 2012 and open any tutorial that talks about C#. It'll be a little confusing at start (like all programming languages), but you will learn to appreciate LINQ, XAML and the massive amount of libraries eventually.
I was wondering why not more people have pointed towards C#?
If you want to make the most basic GUI application you can simply use the plain old winforms to start creating small application that can help you with some simple things you want to automate (like moving files over your network on a regular base or something).
You can download Visual Studio Express for free, open up a winform project, drag some buttons and fields on the ui and create an app withing 30 mins. Keep expanding and you should soon be able to get into more complex things, but this way you had a friendly introduction in basic programming.