Jump to content

How to Actually Get Into Programming?

Howdy y'all,

 

I'm a 22 year old sysadmin trying to get into programming. On a day-to-day basis I have to automate tasks through a script editor that is integrated to our RMM software.

 

I'm not sure what the language is (probably an overlay of Ruby) but I understand the core premise of scripting languages at least - for my needs, it's all sequential and relies on nested if statements. So for example, I start a script like this:

 

Here's a very basic example of a type of script that I make:

 

If: 'C:\Program\File1' exists

 

Then:

1. Download Zip1.zip

2. Download Unzip.exe

3. Unzip.exe Zip1.zip

4. Run File2.msi /q

5. Gpupdate.exe /force

 

Else:

1. Download File1

2. Download Zip1.zip

3. Download Unzip.exe

4. Unzip.exe Zip1.zip

5. Run File2.msi /q

6. Gpupdate.exe /force

 

My question is this: how do you get into actual programming? I'm interested in learning how to program to better understand why what I do on a command line makes sense. Long-term goals would be learning SQL due to necessary administration of SQL applications - but other than that I can't figure out which language to try to learn/how to learn it/why learn that language over any other.

 

I've logged 2 hours on CodeAcademy with Python (chose that since it's the code behind Dropbox, and it seemed cool) but I was unable to see the bigger picture - I can't see where my code transforms from line of commands to an actual executable.

 

What would you guys recommend? Thanks for reading, and any input would be appreciated!

Link to comment
Share on other sites

Link to post
Share on other sites

I started out with this guy Brackeys, really easy to follow and high quality stuff.
Heres his first tutorial video:

 

Enjoy!

Link to comment
Share on other sites

Link to post
Share on other sites

Pick a language and learn its syntax. C# is good, Java is also good. Both are very similar in syntax. They also both support SQL databases so you could work on learning SQL at the same time

Link to comment
Share on other sites

Link to post
Share on other sites

I say just stick with Python for now. You can learn all the programming basics with it then use it to work with SQL and files. Then you can try replicating some command line programs you use (or make your own).

Link to comment
Share on other sites

Link to post
Share on other sites

What makes all of the different programming languages necessary? One concept I haven't grasped is the idea of choosing a language - what makes you pick one over another?3

Link to comment
Share on other sites

Link to post
Share on other sites

I'd learn Python first as it's very very easy to run across different platforms which is handy when your a sysadmin, it's one of the most versatile languages out there meaning you can using it for practically anything. Also for the long run I'd learn MySQL/SQL and PHP.

Mein Führer... I CAN WALK !!

Link to comment
Share on other sites

Link to post
Share on other sites

What makes all of the different programming languages necessary? One concept I haven't grasped is the idea of choosing a language - what makes you pick one over another?3

 

Here's some discussion on the topic.

 

Each language will have it's own pros and cons but many languages can program a lot of the same things. Some languages will share similar syntax, but none will be exactly the same. As a beginner, usually languages like Python are recommended because the syntax is simple (it's also a great language).

Link to comment
Share on other sites

Link to post
Share on other sites

Don't bother with tutorials (they just tend to make things longer than they need to be), find a fairly simple open source program/engine that you're interested in. At first you won't understand a thing or very little, but just get little bits and google them until you understand what the code does. Then once you're fairly comfortable start changing little bits here and there.

As for languages you should learn I'd go with GML 2.0 (the yoyogames one, not Geography Markup Language), it's very good, fast, easy and cross platform, though not as widely used as something like Python (Python is also good, but kinda slow).

"My game vs my brains, who gets more fatal errors?" ~ Camper125Lv, GMC Jam #15

Link to comment
Share on other sites

Link to post
Share on other sites

From you example I take it you are mainly working with windows systems. And in that case C# would be a great place to start.

Either starting with tutorials or learning by examples works I think I would recommend the later in your case and a good place for you to start is over at:

http://www.java2s.com/Code/CSharp/CatalogCSharp.htm

 

Mainly

http://www.java2s.com/Code/CSharp/File-Stream/File.htm

http://www.java2s.com/Code/CSharp/Network/Web-Client.htm

http://www.java2s.com/Code/CSharp/Development-Class/Process.htm

 

And to get you starting grab the community edition of Visual Studio http://www.visualstudio.com/

Link to comment
Share on other sites

Link to post
Share on other sites

I agree with @madknight3 that you should stay on course with the Python. As you have already mentioned scripting is your natural background - it's what your most comfortable with right now? Therefore you have a natural advantage. Master Python first and it will provide you with a way in at least.

 

SQL is a triviality to most Software Engineers/Developers. There's not a whole lot of complexity to it and it's often simply picked up along the way as a side effect (often during one's junior years). I don't mean this to sound conceited, what I'm trying to say is not to worry a whole lot about seeing it as a mountain to climb initially.

 

Beyond the actual work of learning a given language; it's syntax and it's nuances there exists the theory. The theory is for the most part language agnostic. As one gains knowledge of a language, other languages are made easier by exponential inference (there is a great deal of topological similarities to be found between languages). Comprehension of the theory then magnifies this law. That said there's a different path of theory to be chosen depending on what it is exactly one aspires to become. I am referring to the Software Engineering/Development theory that directly applies to the different programming paradigms as well as disciplines such as Computer Science and Software Engineering/Development.

 

Lets quickly examine the object oriented pathway as an example. One would be required to understand architectural concepts such as Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency Inversion (SOLID), Design Patterns of which MVVM & Dependency Injection are in much prevalence in current industry and Inversion of Control (IoC) naming just a few drops out of a considerably deep ocean.

 

It can also be quite beneficial that one combines theory form different paradigms. For example one can gain quite an advantage by twining OO with Functional theory when it comes to technologies such as LINQ and TPL (both examples from Microsoft's stack). An especially interesting concept when thinking functional (touches on some Functional DPs) is that Design Patterns are an indication of flaws or missing features in a language, that they should in fact not be needed at all; talked about here :)

 

Moreover it's not enough to grasp the theory alone, one has to be able to implement it in accordance with common methodologies (can be theory agnostic). There is the Agile Development Methodology, all the rage right now in industry. It's often well suited to small to medium projects, is criticised as falling apart on large ones and can be highly subjective between organizations! Complementing this we have ScrumPair Programming, Test Driven Development (TDD of which I am a fan), Behaviour Driven Development (BDD) and Mocking (complements any testing strategy).

 

What's especially nice about TDD is that one can often simply start when they have no clear idea of design or direction and both can just emerge as part of the process. Names for things as well as architecture just happens and evolves naturally though the iterative Red, Green & Refactor cycle. The test names (given when then) can then feed into/actually form the acceptance criteria (the business requirements) feeding back into the Agile process and up to the stake holders.

 

It's a rich and diverse field that you are contemplating. How far do you really want to go and what do you really want to do?

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

I reccomend C# if you are into mobile app development, game development, and such, (its what I use it for).

 

Once you learn one language, you will basicly be able to understand most of all other languages, as stated above.

Link to comment
Share on other sites

Link to post
Share on other sites

I agree with @madknight3 that you should stay on course with the Python. As you have already mentioned scripting is your natural background - it's what your most comfortable with right now? Therefore you have a natural advantage. Master Python first and it will provide you with a way in at least.

 

SQL is a triviality to most Software Engineers/Developers. There's not a whole lot of complexity to it and it's often simply picked up along the way as a side effect (often during one's junior years). I don't mean this to sound conceited, what I'm trying to say is not to worry a whole lot about seeing it as a mountain to climb initially.

 

Beyond the actual work of learning a given language; it's syntax and it's nuances there exists the theory. The theory is for the most part language agnostic. As one gains knowledge of a language, other languages are made easier by exponential inference (there is a great deal of topological similarities to be found between languages). Comprehension of the theory then magnifies this law. That said there's a different path of theory to be chosen depending on what it is exactly one aspires to become. I am referring to the Software Engineering/Development theory that directly applies to the different programming paradigms as well as disciplines such as Computer Science and Software Engineering/Development.

 

Lets quickly examine the object oriented pathway as an example. One would be required to understand architectural concepts such as Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency Inversion (SOLID), Design Patterns of which MVVM & Dependency Injection are in much prevalence in current industry and Inversion of Control (IoC) naming just a few drops out of a considerably deep ocean.

 

It can also be quite beneficial that one combines theory form different paradigms. For example one can gain quite an advantage by twining OO with Functional theory when it comes to technologies such as LINQ and TPL (both examples from Microsoft's stack). An especially interesting concept when thinking functional (touches on some Functional DPs) is that Design Patterns are an indication of flaws or missing features in a language, that they should in fact not be needed at all; talked about here :)

 

Moreover it's not enough to grasp the theory alone, one has to be able to implement it in accordance with common methodologies (can be theory agnostic). There is the Agile Development Methodology, all the rage right now in industry. It's often well suited to small to medium projects, is criticised as falling apart on large ones and can be highly subjective between organizations! Complementing this we have ScrumPair Programming, Test Driven Development (TDD of which I am a fan), Behaviour Driven Development (BDD) and Mocking (complements any testing strategy).

 

What's especially nice about TDD is that one can often simply start when they have no clear idea of design or direction and both can just emerge as part of the process. Names for things as well as architecture just happens and evolves naturally though the iterative Red, Green & Refactor cycle. The test names (given when then) can then feed into/actually form the acceptance criteria (the business requirements) feeding back into the Agile process and up to the stake holders.

 

It's a rich and diverse field that you are contemplating. How far do you really want to go and what do you really want to do?

 

Thank you for the response. I think I will continue looking into Python - I've begun following the tutorial for C# posted above and it's definitely educational.

 

I'm not sure how far I want to go. As a sysadmin I work day-to-day on servers - 90% Windows, with Domain Controllers, Application Servers, File Servers. Outside of Server Administration I work with backup systems - Datto in particular, which is Linux-based. I also configure/manage networks - we have a spread of Cisco ASA's, SonicWALL TZ210's and Sophos UTM's. I also have to configure Layer 2 and 3 network devices - configuring alternate subnets and VLAN's.

 

Out of curiosity, I've figured out how to make a very basic website a few months ago - I host the server internally and configured the HTML through Dreamweaver. (www.dtammam.com for laughs). Programming seems like the next step - I have to script, and the logic makes sense - it assists me in automating tasks that would take hours to do. For example, one of our clients uses a CAD/CAM software suite - SolidWorks. I create an Admin install image, create a script that runs in the background and runs the image with silent parameters on each workstation. Took me about 2-3 hours to script - the install takes 30 minutes. 30 minutes times 40 workstations really saved a lot of time.

 

Programming seems interesting because the way I'm trying to enter it, I want to be able to solve little shortfalls that certain OS' and applications have. One example would be in the game Clash of Clans - I'd like to make a program where I have a field for each type of troop or upgrade, and if I enter how many troops or upgrades I'm running, it could give me the cumulative cost (the app isn't programmed to do it currently). I'd also like to make my own personal Dropbox-type service (this will probably require Linux programming with rsync).

 

The end-goal is to be able to see a problem and be able to create a program to solve the issue. It's hard to see the big picture for this idea (it might be ambitious), but I'm hoping my expectations are realistic!

Link to comment
Share on other sites

Link to post
Share on other sites

Snip

 

I don't know what you just said but it sounds awesome. How would you advise a kindergartener to develop to the point of eventually understanding what any of that means within however many decades it requires?

 
Link to comment
Share on other sites

Link to post
Share on other sites

I started the same way as you, I was a sys-ad at a small company and I was using C# to automate things like alerts etc on the network and with peoples machines.

 

Since I have moved companies I have learnt python and am now using that to create networking tools around the ASA and F5 platforms, so I think this is a good way to learn a language by taking real world problems and solving them with code.

 

For me this solidifies the content far more when you adapt some code to suit you. As for languages I would say that Python is a great language to start on (even in windows), the only thing that I would say is that it lacks an out of the box events system, but this is not an issue to start with. 

Link to comment
Share on other sites

Link to post
Share on other sites

I don't know what you just said but it sounds awesome. How would you advise a kindergartener to develop to the point of eventually understanding what any of that means within however many decades it requires?

 

That's a difficult question for me to answer. I arrived relatively late in life to all of this, that said I found that I had a very strong drive and natural affinity for it all. I suppose it depends on how much you really want something, how interesting it is to you and if it truly excites you.

 

Small but careful steps I'd imagine; choose a language that you like the look of, maybe from the usual recommendations (C#, C++, Java, Python) and start with the code. Given such an early stage there's plenty of time for theory, though one should make an attempt earlier rather than later. It can be found in abundance at sites such as lynda.com and pluralsight. Again this depends on how one best learns - which style of learning one is most inclined towards.

 

I would encourage you to never stop asking questions and looking at the detail. Become obsessed with the detail and doing things properly, finding the most concise and eloquent implementation/methodology and just generally strive for perfection - for more. But at the same time accept that you'll chase after that for the rest of your lifetime and that you'll never ever stop learning.

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

That's a difficult question for me to answer. I arrived relatively late in life to all of this, that said I found that I had a very strong drive and natural affinity for it all. I suppose it depends on how much you really want something, how interesting it is to you and if it truly excites you.

 

Small but careful steps I'd imagine; choose a language that you like the look of, maybe from the usual recommendations (C#, C++, Java, Python) and start with the code. Given such an early stage there's plenty of time for theory, though one should make an attempt earlier rather than later. It can be found in abundance at sites such as lynda.com and pluralsight. Again this depends on how one best learns - which style of learning one is most inclined towards.

My learning style is very unique. One method does not apply to me. So finding materials that work for me or people who can explain it to me is next to impossible. I'm always able to wear down even the most helpful of people if they cannot explain it in the way I need to understand it. Lynda and similar are a waste of money for my learning style. I couldn't learn from them for free. They're just that far from me.

 

As for programming, I get stuck on the syntax. People say it's the easiest part but I could never figure it out. People keep on saying "it's easy" and "it doesn't matter" - it does matter though. Just because you apply programming logic to any language does not make them easy to learn. And I have yet to find any materials that can teach syntax without the rest of the crap. People usually don't realize how many resources I've actually tried unsuccessfully. They pick up 1 book and then they know it. I go through 100 and I'm just as clueless as book #1.

 

But yeah, that doesn't particularly matter at this point. I'm just impressed at your expanded mind. ^_^

 
Link to comment
Share on other sites

Link to post
Share on other sites

I'm of the opinion that you need to have the drive to want to be able to do or understand something so badly that you persist and learn how to.

Learn the difference between language and implementation.

If you are interested in the mechanics I suggest you stick with CPython (Python interpreter in C, what people most commonly refer to as Python), learn how it is implemented, compare it to Pypy, learn the differences, then move into cython (which is Python-like and compiles into C), then finally learn C/C++ and how that works.

At that point you will know about interpreters, just-in-time compilers and regular compilers. And an implementation of a language to go with each.

What makes all of the different programming languages necessary? One concept I haven't grasped is the idea of choosing a language - what makes you pick one over another?3

Everything is great at something, nothing is great at everything. That is something very true for programming languages.

 

And I bet that must be a quote from somewhere.

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×