Where should I start with computer science as a high school junior?

In summary: It doesn't really matter where you download it from, as long as you get it downloaded.Should it be free? Is it kinda just like downloading a game or something to my computer?Yes, it's kinda like downloading a game.
  • #1
stephen8686
42
5
I am a high school junior who has completed the AP Physics C mechanics and E&M courses. I know that further down the road I will need to learn some programming. I have a little bit of time on my hands to get a start on this, but have no experience with computer programming. I have read I should first learn Fortran or C/C++, but others say fortran is dead and I should just start with matlab. Still others say to just go the normal route and start with python and javascript. What should I do? Also what is the best way for a complete novice to begin learning this? Does anyone know of any good online courses or books? Should I just wait a few years until I have a college course based on this?
 
  • Like
Likes Stavros Kiri
Physics news on Phys.org
  • #2
stephen8686 said:
I am a high school junior who has completed the AP Physics C mechanics and E&M courses. I know that further down the road I will need to learn some programming. I have a little bit of time on my hands to get a start on this, but have no experience with computer programming. I have read I should first learn Fortran or C/C++, but others say fortran is dead
Fortran is very much NOT dead, but I wouldn't start with this language.
stephen8686 said:
and I should just start with matlab.
I wouldn't recommend starting with matlab, either.
stephen8686 said:
Still others say to just go the normal route and start with python and javascript
Python, maybe. JavaScript, no.
My recommendation is C first, if you can find such a course (increasingly hard these days, as so many courses start right off with C++). My reason for recommending starting with C rather than C++ is to get the basics of procedural programming (branching structures and looping structures) without the added complication of object-oriented programming.

Python would be OK, but in some respects it is such a high-level language that it's hard to comprehend what all is happening "under the hood." With C, and to a lesser extent C++, you get more of a feel for what the computer is actually doing.
stephen8686 said:
. What should I do? Also what is the best way for a complete novice to begin learning this? Does anyone know of any good online courses or books? Should I just wait a few years until I have a college course based on this?
My state (Washington) has a Running Start program in which high school students can enrol in courses in community colleges. As far as books, take a look at this thread: https://www.physicsforums.com/threads/what-is-the-best-textbook-for-learning-c.902078/
 
  • Like
Likes Stavros Kiri and DrClaude
  • #3
Mark44 said:
Fortran is very much NOT dead, but I wouldn't start with this language.
I wouldn't recommend starting with matlab, either.
Python, maybe. JavaScript, no.
My recommendation is C first, if you can find such a course (increasingly hard these days, as so many courses start right off with C++). My reason for recommending starting with C rather than C++ is to get the basics of procedural programming (branching structures and looping structures) without the added complication of object-oriented programming.

Python would be OK, but in some respects it is such a high-level language that it's hard to comprehend what all is happening "under the hood." With C, and to a lesser extent C++, you get more of a feel for what the computer is actually doing.

My state (Washington) has a Running Start program in which high school students can enrol in courses in community colleges. As far as books, take a look at this thread: https://www.physicsforums.com/threads/what-is-the-best-textbook-for-learning-c.902078/

Thanks for the advice Mark. I suppose I will start self teaching from a book similar to this:

https://www.amazon.com/dp/0131103628/?tag=pfamazon01-20

But I also have a couple stupid questions, so just remember I have no experience in coding. So I have to download a "compiler". What is a compiler, does it matter where I download it from? Should it be free? Is it kinda just like downloading a game or something to my computer? I understand these questions don't really belong on this forum but my school lacks any sort of programming class and I have no idea what I'm doing.
 
Last edited by a moderator:
  • #4
stephen8686 said:
Thanks for the advice Mark. I suppose I will start self teaching from a book similar to this:

https://www.amazon.com/dp/0131103628/?tag=pfamazon01-20
This is a great book, but I wouldn't recommend it as a book to start with. Some people use it to learn C, but as you have no programming experience, other books would be better, IMO. The other thread I linked to lists a bunch of different books.
stephen8686 said:
But I also have a couple stupid questions, so just remember I have no experience in coding. So I have to download a "compiler". What is a compiler, does it matter where I download it from?
A compiler is required for C, C++, Fortran, and other compiled languages. A compiler is software that translates the source code you write into instructions that the computer can execute. Other languages, such as Python, are interpreted languages, and these require software called an interpreter to do the translation. The major difference between a compiler and an interpreter (which are two kinds of program translators) is that a compiler translates your entire program all at once, while an interpreter translates your code one line or so at a time, runs that code, then translates another line, and so on.

For C and C++, there are quite a few options for downloading compilers, including gcc and Microsoft's Visual Studio Community Edition. (Other editions of VS cost money.)
For gcc, start here: https://gcc.gnu.org/ (versions for Linux and Windows)
For Visual Studio, start here: https://www.visualstudio.com/vs/community/ (runs on MSFT Windows)
stephen8686 said:
Should it be free? Is it kinda just like downloading a game or something to my computer? I understand these questions don't really belong on this forum but my school lacks any sort of programming class and I have no idea what I'm doing.
 
Last edited by a moderator:
  • Like
Likes Stavros Kiri
  • #5
stephen8686 said:
But I also have a couple stupid questions, so just remember I have no experience in coding. So I have to download a "compiler". What is a compiler, does it matter where I download it from? Should it be free?
You will need to obtain software such as a "compiler" or an "interpreter" unless such software is already installed on you computer. There are two general ways to approach creating programs. Some people prefer to use an "integrated development environment" such as Eclipse. This type of program offers the functions of a text editor specialized to write programs and it provides a window based "mouse oriented" interface to the tasks of compiling and running a program. The more nuts-and-bolts way to write programs is use an editor like gedit to write them and then to compile and run the program by typing commands in a terminal interface. Using that approach, you would download the programming language and its libraries as separate software. A compiler does not run like a game. It has no window interface. Any output it produces is printout to a text window.

Either way you go, you are going to run into tasks that have to do with "system administration" rather than programming - such as seeing you have all the "library files" that are needed, seeing files are in the correct locations and have the right permissions etc.
 
  • #6
The question is still one of interest that I have. So many years ago, a beginner computer science or programming student just enrolled in a course, and the language was already available IN THE MACHINES, AT SCHOOL. Too much has changed and someone like me would be lost. As things WERE at the time, we just enrolled in a beginning computer science/programming course, read our book, attended lectures, did our homework and our laboratory assignments as best we could (not needing our own personal machine), and we learned how to program in our given language. These days, download a interpreter or compiler and what to install and how to adjust our own machine/personal computer... not sure about the fundamental learning path to take.
 
  • #7
symbolipoint said:
As things WERE at the time, we just enrolled in a beginning computer science/programming course, read our book, attended lectures, did our homework and our laboratory assignments as best we could (not needing our own personal machine), and we learned how to program in our given language.
That's still the way it's done in college or university intro programming courses. At least that's the way I used to teach those courses, and that's the way they still do it at the college where I taught, as far as I know. We did the lectures actually as combination lecture/labs, in a computer lab, where students used the compiler(s) that we had set up for them. We gave them instruction on how to use them, before doing serious programming with them. Outside of class, they could come into the lab and work on their assignments on their own. Some students of course went out and got compilers for their own computers so they didn't have to rely on the lab computers, but it wasn't required that they do so.
 
  • #8
I recommend learning C first. It's the basis for JavaScript and several other modern languages and is still a very widespread language in its own right, AND it is a natural lead-in to C++ (which I do NOT recommend starting with). I normally recommend the "white book" that Mark linked to but for someone with no experience at all, I agree w/ Mark that it's not the best choice (too terse for a rank beginner).
 
  • #9
There is some good advice here. Focusing C or Python first are both very good ways to start. A huge portion of modern languages inherit (heh) from C, and it is a bit closer to the metal than something like Python, so you'll get more familiarity with the computer hardware in the process.

One thing that people perhaps don't think enough about is the role of complementers and network effects. There are tons of good online resources (e.g. books and moocs) for Python. There are some accessible things on C, but not as much, I think.

If going the route of C, consider looking at https://www.edx.org/course/introduction-computer-science-harvardx-cs50x . It is perhaps the most popular intro to cs course and uses C.

If you go the route of Python, consider things like the MIT courses on edx ( https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-9 ). In general MIT computing courses on edX use Python -- though you'll find one or two that don't. Also Allen Downey has some great free books, mostly covering Python http://greenteapress.com/wp/

One additional thought:

A huge part of learning programming is doing it repeatedly, over and over -- and pushing yourself on projects while you do this. In the event you happen to live in an urban area where you spend a decent amount of time on a train or subway, you might prefer starting with Python. To my knowledge, there are great portable Python installations available for iPad and iPhone (e.g. Pythonista). There is something called "C/C++ - offline compiler" which has decent reviews though I can't vouch for it.

There was a time when I spent a decent chunk of my day on public transport and I made full use of coding on my iphone or ipad in Pythonista. An extra hour of coding a day, day in and day out, really does add up. (Incidentally Pythonista just rolled out for python 3.x... it seems that their much larger review base for version 2.x no longer shows up. My interests have outgrown the app so I'm not upgrading, but I still have fond feelings for it.)
 
  • Like
Likes BvU and Stavros Kiri
  • #10
StoneTemplePython said:
There are tons of good online resources (e.g. books and moocs) for Python.

One would have to be careful to consult resources that matched the version of Python one was using, since (I have read) that the latest versions aren't backward compatible with the older versions. Of course, that might be true of other languages.
 
  • #11
Thanks for all the advice guys. When I get some time I will begin learning C from the recommended edX course above. I was also able to find a senior at my school who knows a decent amount about programming, and he is willing to answer any further questions that I have. Thanks again!
 
  • #12
Stephen Tashi said:
One would have to be careful to consult resources that matched the version of Python one was using, since (I have read) that the latest versions aren't backward compatible with the older versions.
Right, they aren't. There were a lot of changes between versions 2.x and 3.x, not the least of which is how the print function works.
Stephen Tashi said:
Of course, that might be true of other languages.

stephen8686 said:
Thanks for all the advice guys. When I get some time I will begin learning C from the recommended edX course above. I was also able to find a senior at my school who knows a decent amount about programming, and he is willing to answer any further questions that I have. Thanks again!
In case your school contact gets stumped, you can also ask questions here. We have quite a few members who are knowledgeable in C and other languages.
 
  • #13
stephen8686 said:
I am a high school junior who has completed the AP Physics C mechanics and E&M courses. I know that further down the road I will need to learn some programming. I have a little bit of time on my hands to get a start on this, but have no experience with computer programming. I have read I should first learn Fortran or C/C++, but others say fortran is dead and I should just start with matlab. Still others say to just go the normal route and start with python and javascript. What should I do? Also what is the best way for a complete novice to begin learning this? Does anyone know of any good online courses or books? Should I just wait a few years until I have a college course based on this?

Don't start with a programming language but a programming course that uses no language at all. I took one online at a local community college. I found that it taught me a thought process, along with pseudocode and flowcharts. I took Java and C++ after that and found I was better prepared than my classmates. I ended up with a 98% and 99% in those classes. One of the books I kept from the programming fundamentals class was Programming Logic and Design by Joyce Farrell. I actually used it to teach programming basics to my middle school students in an after school program. It is a small book but I found it very easy to understand. She also has a Java book that I used with my middle school students for the second semester.
 
  • Like
Likes Stavros Kiri
  • #14
stephen8686 said:
I am a high school junior who has completed the AP Physics C mechanics and E&M courses. I know that further down the road I will need to learn some programming. I have a little bit of time on my hands to get a start on this, but have no experience with computer programming. I have read I should first learn Fortran or C/C++, but others say fortran is dead and I should just start with matlab. Still others say to just go the normal route and start with python and javascript. What should I do? Also what is the best way for a complete novice to begin learning this? Does anyone know of any good online courses or books? Should I just wait a few years until I have a college course based on this?
Start with Python if you're just self teaching. C++ if you are very patient and good at learning from a very hard to read textbook, or if you have a mentor or someone to prevent you from getting into bad habits.

I'd say Python.
 
  • Like
Likes Stavros Kiri
  • #15
Anyone here thinks it's always a good idea to get a taste of lower level languages, such as machine code and assembly? I think that gives us a good idea what the computer does etc.
I recall taking a mandatory such course (labcourse) in college back in the 80's, after a general information science introduction & Basic language as a first step (back then ...).
[Received a good grade on it too! - though don't remember much by now ...]

At the same time you can compare lower level languages e.g. to C etc.
E.g. see:
 
  • #16
Stavros Kiri said:
Anyone here thinks it's always a good idea to get a taste of lower level languages, such as machine code and assembly?
Sure, after you already know some programming in a high-level language. We did that as part of a course called something like "computer organization" or "computer architecture", which CS majors took after the introductory courses.
 
  • Like
Likes Stavros Kiri

Related to Where should I start with computer science as a high school junior?

1. What are the basic concepts to learn in computer science?

The basic concepts to start learning in computer science include algorithms, programming languages, data structures, computer architecture, and operating systems. These concepts lay the foundation for understanding the principles and practices of computer science.

2. Do I need to have prior knowledge to start learning computer science?

No, you do not need to have any prior knowledge to start learning computer science. However, having a basic understanding of mathematics and logical reasoning can be helpful in understanding some concepts.

3. Which programming language should I learn first?

There is no one programming language that is considered the best to start with. However, some popular choices for beginners include Python, Java, and C++. It is important to choose a language that aligns with your interests and goals.

4. How can I practice and apply what I learn in computer science?

You can practice and apply what you learn in computer science by working on personal projects, participating in coding challenges, and collaborating with others on coding projects. These activities will help you improve your skills and gain practical experience.

5. What are the career opportunities in computer science?

The career opportunities in computer science are vast and continuously expanding. Some popular career paths include software development, data science, web development, and cybersecurity. With the rapid advancement of technology, there is a high demand for skilled computer science professionals in various industries.

Similar threads

  • STEM Academic Advising
Replies
3
Views
859
  • STEM Academic Advising
Replies
9
Views
1K
  • STEM Academic Advising
Replies
6
Views
1K
  • STEM Academic Advising
Replies
1
Views
541
  • STEM Academic Advising
Replies
8
Views
2K
Replies
16
Views
1K
Replies
2
Views
1K
  • STEM Academic Advising
Replies
13
Views
3K
  • STEM Academic Advising
Replies
23
Views
3K
  • STEM Academic Advising
Replies
3
Views
925
Back
Top