Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - 710001888

Pages: [1]
1
Science Discussion Forum / How to start programming?
« on: October 10, 2018, 02:36:32 AM »
The objective of this article is to make learning programming accessible to anyone.

Frequently Asked Questions
As a mentor, I am constantly asked the following:

“Which programming language should I learn if I’m new?”
“Which programming language is most in-demand for jobs?”
“What’s the most popular programming language?”
Top Programming Languages
If you’re looking for an official ranking of the top programming languages, you can find it here: IEEE Spectrum top programming languages

That list is great for checking whether a particular programming language is in use today. However, if you’re new to programming, I don’t recommend choosing a language solely based on a list.

How to choose a programming language
Computer science is an entirely cumulative field of study. That means, each successive topic builds off prior topics.

If you have previously attempted to learn programming (or any STEM field) in school, tried your best, but failed — you weren’t the problem. A good professor of any cumulative subject carefully curates the curriculum. Provided that each student has sufficiently prepared and satisfied the prerequisites, the expectations for the students’ prior knowledge should be clear. A good professor understands the expectations and assumes no knowledge beyond that scope. Anything outside of the expectations must be taught. Each topic in the curriculum is ordered sequentially, respective to the other topics.

When a subject is cumulative, meticulous attention must be paid when designing a course curriculum or learning path. With that said, don’t choose a language for its ranking; choose a language for which you have a complete learning path that makes no assumptions about prior knowledge.

A few words of advice
Before you begin learning how to code, it’s important to reflect on the point I made above: everything in computer science is cumulative.

I like to reiterate this because the biggest mistake you can make as an aspiring programmer is giving up because you don’t think you’re smart enough to learn programming. Learning to code has nothing to do with your intelligence. Yes, it’s difficult to learn programming, not because of who you are, but because there are a lot of topics to learn.

First rule, accept that the following scenario is going to happen: you’re introduced to a new topic that makes absolutely no sense to you.

That scenario is going to happen over and over again. How you handle that situation, each time it happens, is the only factor that will determine your success.

If the current topic you’re learning doesn’t make sense to you, stay where you are. Do not proceed to the next topic. To reiterate, the topics are cumulative. Skipping ahead is like trying to attach a roof to a house that lacks a frame, walls, and a foundation.

I find myself in this situation all the time. I often have to rewatch the same lecture of a video tutorial several times for me to grasp what I’m learning. Don’t get discouraged if you find yourself in my shoes.

If the tutorial (or book) you’re using didn’t sufficiently explain the topic, you’re going to have to find other resources that work for you. There’s no excuse for giving up just because your tutorial’s coverage of a topic didn’t work for you. You can find just about anything you’re looking to learn for free on YouTube. Figure out what to search for (e.g., [the topic] in [your programming language] + any other helpful keywords).

If you’re searching on YouTube for educational tutorials, check the stats first. Take a quick look at the rating and/or the view count. If you’re still unsure if a video is worth your time, read some of the comments to gage others’ opinions.

A lot of topics aren’t going to make sense the first time around. So, refrain from the negative self-thoughts.

The goal is to be conscious of your comprehension as you’re learning. As you progress through the learning path, you need to self-reflect. For each topic you cover, ask yourself questions such as:

“Does this topic make sense to me?”
“Was there any new terminology? If so, was a formal definition provided for each new term?”
“Were there any new skills? Do I understand how each new skill is used in application? Can I demonstrate my understanding of this skill by solving practice problems?”
“Will I remember what I just learned tomorrow? And the day after? If not, how am I going to commit it to memory?”
One last piece of advice: never underestimate the power of memorization. Memorization is a totally underutilized approach in learning. Yes, comprehension of a topic is the ultimate goal. However, comprehension may take time. If you are really struggling to grasp a topic, break down the topic and memorize the important terms. If you can’t comprehend how something works, your immediate goal should be memorization. If you need tips on how to tackle memorization, consider using the study card technique. You can read more about how I use this technique in my Interview Prep document.

1 — Computer Science Fundamentals
The first step is learning computer science fundamentals, which I cover in my article: Intro to Computer Science Terminology. This article is written specifically with my audience in mind — everyone. I intentionally created this so that it is easy to understand for anyone with no background in computers.

The concepts covered in the article are predominantly definitional. You can casually read through the article, and that’s fine it that suffices for you. I recommend committing these terms to memory. Approach each term as though you’re in school and you need to be able to recall each term’s definition for an exam. You don’t have to commit yourself so thoroughly if you don’t want to. However, the more of these concepts that you can commit to memory, the easier it will be to understand later topics.

2 — Propositional Logic (optional)
No, you don’t have to be strong in math to be a programmer. Math skills can be helpful, but they’re not necessary.

If you’re insecure about your math abilities, I recommend learning propositional logic. The principles covered in propositional logic are the building blocks of programming.

You can learn propositional logic from this YouTube tutorial: Basic Concepts in Propositional Logic.

3 — Java Programming
After you’ve learned the basics of computer science, you’ll be ready to learn a programming language.

I have put a lot of thought and effort into designing a path that is suitable for everyone, regardless of their background. I chose Java for this learning path because Java is the language that I am most experienced in.

Java is one of the most in-demand programming languages. It’s classified as an object-oriented programming language (you’ll learn what this means later on) and it’s used to make desktop, web, and mobile applications.

If you prefer learning from a book, I recommend the following: Head First Java.

If you’re looking for a video tutorial, I recommend watching videos #1–19, 31–33, 88, and 93 in the Java YouTube tutorial by Derek Banas: Java Video Tutorial.

The first video in the YouTube tutorial will direct you to download a computer program called Eclipse. Eclipse is an Integrated Development Environment (IDE). You can think of an IDE as a fancy term for a word editor that is made for programmers. It’s just a computer application that provides a text editor for programming, along with other tools for running your programs. Here’s the link to Derek Banas’s YouTube video on how to download Eclipse: Install Eclipse for Java.

4 — Algorithms and Data Structures
An algorithm is a set of instructions (or steps) for performing a specific task, where each step must be clearly defined, capable of being executed, and finite (meaning, it doesn’t continue executing infinitely).

A data structure is a way of organizing data in memory.

Algorithms and data structures are two of the most challenging topics of programming. You don’t need to learn algorithms for basic competency in programming. However, if you aspire to work as a software engineer at a reputable tech company, you will be expected to demonstrate comprehension of algorithms and data structures during the interviews.

On a personal note, the tutorial below is what took my algorithm skills from novice to expert: Udemy tutorial on Algorithms and Data Structures. I’ve purchased a lot of tutorials on algorithms. This was by far the most comprehensive one that I’ve come across. Whether you want to learn algorithms and data structures or prepare for technical interviews, this tutorial is your best bet for success.

Note: the course is expensive, but essential. I was able to get in contact with the instructor, and she has generously offered a coupon code which reduces the cost from $50 to $10. The coupon code will be applied automatically when you click the link.

I recommend using the following tutorial alongside the Udemy tutorial: VisuAlgo. VisuAlgo is a free resource that shows visuals of how the values input into an algorithm change throughout its execution.

5— Android development
Android development is, in my opinion, one of the most fun applications of Java programming. Android apps are predominantly programmed in Java, so once you learn Java, you’re ready to learn Android.

Here is the best free video tutorial to start learning Android: Udacity-Android Development for Beginners.

After you complete the Udacity course above, you have a couple options where to go from there. There should be an extension to the above course that is taught by the same group of Google employees. The additional lectures should become visible once you get through the course (if you can’t find it, search for it on Udacity). That is a good option, especially since it’s free.

However, if you are willing to spend money on an outstanding book, I highly recommend the following: Head First Android Development: A Brain-Friendly Guide. This book gives detailed explanations and helpful visuals to really help you learn the underlying concepts of Android. Each chapter walks you through an example application. Everything is explained thoroughly, using words and diagrams that anyone can understand.

Helpful Resources
Stack Overflow is a website where programmers can get free help with their code. If you get stuck and want to ask a question, search for it first. If you can’t find your question, create an account and post the question yourself!

There are a ton of educational sites where you can find programming tutorials. Some of my favorites are Codecademy, Udemy, Udacity, Team Treehouse, and Khan Academy.

2
Science Discussion Forum / What is torrent and how does it work?
« on: August 29, 2018, 04:52:16 PM »
Most likely, you’ve heard of a torrent, used a torrent, or at least seen that term on the internet somewhere. And whether you have actually used them or not, a lot of people don’t know what it actually is. Let’s talk basics.

When you hear the word “torrent” in the tech world, it usually refers to a computer file that contains metadata holding various information. A torrent file normally comes with the extension .torrent but it does not contain the actual contents to be distributed.
 
This information will then be used by a BitTorrent software such as uTorrent, Transmission or BitTorrent for the “real” distribution – which essentially allows for users to easily download torrent files to their personal computers.
 
In retrospect, due to the ease of use of BitTorrent technology, many torrent users end up downloading copyrighted materials unknowingly. This is of course frowned upon in many countries and some have been prohibiting illegal torrents by means of incarceration. Now, that doesn’t mean all torrents are unsafe for consumption. There’s plenty of legal torrent sites out there which you can use. Check out our own list of these legal torrent sites below.

In short, a torrent file acts as the key to initiating downloading of the actual content. When someone is interested in receiving a shared file (i.e. books, music, documents, etc.), they must first obtain the corresponding torrent file – by either downloading the .torrent file directly or by using a magnet link.
 
A BitTorrent software is then required to open this file/link. Once the BitTorrent software scans the torrent file/link, it’ll then need to find the locations of seeders which are sharing the corresponding file. To do so, it will attempt to connect to a list of defined trackers (from the torrent file metadata) and attempt a direct connection. If it’s successful, the appropriate content will then begin transferring.

To find torrent files, users commonly flock to popular websites such as The Pirate Bay and Kickass Torrents. Although these websites are crazy popular, they have been getting shut down left and right, causing mirror sites to sprout up around the internet. Even though torrents are technically legal, over the years it has become synonymous to illegal activity due to a myriad of users abusively sharing pirated content.
 
Essentially, you’ve got to know what content is legal and what’s illegal before starting any torrent connection. If you’re looking for torrent sites which provides legal torrent contents, check out our list of sites that allow you to download torrents legally.

3
Science Discussion Forum / 11 beginner tips for learning python
« on: August 29, 2018, 12:20:52 AM »
Here are some tips to help you make the new concepts you are learning as a beginner programmer really stick:

Tip #1: Code Everyday
Consistency is very important when you are learning a new language. We recommend making a commitment to code every day. It may be hard to believe, but muscle memory plays a large part in programming. Committing to coding everyday will really help develop that muscle memory. Though it may seem daunting at first, consider starting small with 25 minutes everyday and working your way up from there.

Check out the First Steps With Python Guide for information on setup as well as exercises to get you started.

Tip #2: Write It Out
As you progress on your journey as a new programmer, you may wonder if you should be taking notes. Yes, you should! In fact, research suggests that taking notes by hand is most beneficial for long-term retention. This will be especially beneficial for those working towards the goal of becoming a full-time developer, as many interviews will involve writing code on a whiteboard.

Once you start working on small projects and programs, writing by hand can also help you plan your code before you move to the computer. You can save a lot of time if you write out which functions and classes you will need, as well as how they will interact.

Tip #3: Go Interactive!
Whether you are learning about basic Python data structures (strings, lists, dictionaries, etc.) for the first time, or you are debugging an application, the interactive Python shell will be one of your best learning tools. We use it a lot on this site too!

To use the interactive Python shell (also sometimes called a “Python REPL”), first make sure Python is installed on your computer. We’ve got a step-by-step tutorial to help you do that. To activate the interactive Python shell, simply open your terminal and run python or python3 depending on your installation.

Tip #4: Take Breaks
When you are learning, it is important to step away and absorb the concepts. The Pomodoro Technique is widely used and can help: you work for 25 minutes, take a short break, and then repeat the process. Taking breaks is critical to having an effective study session, particularly when you are taking in a lot of new information.

Breaks are especially important when you are debugging. If you hit a bug and can’t quite figure out what is going wrong, take a break. Step away from your computer, go for a walk, or chat with a friend.

In programming, your code must follow the rules of a language and logic exactly, so even missing a quotation mark will break everything. Fresh eyes make a big difference.

Tip #5: Become a Bug Bounty Hunter
Speaking of hitting a bug, it is inevitable once you start writing complex programs that you will run into bugs in your code. It happens to all of us! Don’t let bugs frustrate you. Instead, embrace these moments with pride and think of yourself as a bug bounty hunter.

When debugging, it is important to have a methodological approach to help you find where things are breaking down. Going through your code in the order in which it is executed and making sure each part works is a great way to do this.

Once you have an idea of where things might be breaking down, insert the following line of code into your script import pdb; pdb.set_trace() and run it. This is the Python debugger and will drop you into interactive mode. The debugger can also be run from the command line with python -m pdb <my_file.py>.

Make It Collaborative
Once things start to stick, expedite your learning through collaboration. Here are some strategies to help you get the most out of working with others.

Tip #6: Surround Yourself With Others Who Are Learning
Though coding may seem like a solitary activity, it actually works best when you work together. It is extremely important when you are learning to code in Python that you surround yourself with other people who are learning as well. This will allow you to share the tips and tricks you learn along the way.

Don’t worry if you don’t know anyone. There are plenty of ways to meet others who are passionate about learning Python! Find local events or Meetups or join PythonistaCafe, a peer-to-peer learning community for Python enthusiasts like you!

Tip #7: Teach
It is said that the best way to learn something is to teach it. This is true when you are learning Python. There are many ways to do this: whiteboarding with other Python lovers, writing blog posts explaining newly learned concepts, recording videos in which you explain something you learned, or simply talking to yourself at your computer. Each of these strategies will solidify your understanding as well as expose any gaps in your understanding.

Tip #8: Pair Program
Pair programming is a technique that involves two developers working at one workstation to complete a task. The two developers switch between being the “driver” and the “navigator.” The “driver” writes the code, while the “navigator” helps guide the problem solving and reviews the code as it is written. Switch frequently to get the benefit of both sides.

Pair programming has many benefits: it gives you a chance to not only have someone review your code, but also see how someone else might be thinking about a problem. Being exposed to multiple ideas and ways of thinking will help you in problem solving when you got back to coding on your own.

Tip #9: Ask “GOOD” Questions
People always say there is no such thing as a bad question, but when it comes to programming, it is possible to ask a question badly. When you are asking for help from someone who has little or no context on the problem you are trying to solve, its best to ask GOOD questions by following this acronym:

G: Give context on what you are trying to do, clearly describing the problem.
O: Outline the things you have already tried to fix the issue.
O: Offer your best guess as to what the problem might be. This helps the person who is helping you to not only know what you are thinking, but also know that you have done some thinking on your own.
D: Demo what is happening. Include the code, a traceback error message, and an explanation of the steps you executed that resulted in the error. This way, the person helping does not have to try to recreate the issue.
Good questions can save a lot of time. Skipping any of these steps can result in back-and-forth conversations that can cause conflict. As a beginner, you want to make sure you ask good questions so that you practice communicating your thought process, and so that people who help you will be happy to continue helping you.

Make Something
Most, if not all, Python developers you speak to will tell you that in order to learn Python, you must learn by doing. Doing exercises can only take you so far: you learn the most by building.

Tip #10: Build Something, Anything
For beginners, there are many small exercises that will really help you become confident with Python, as well as develop the muscle memory that we spoke about above. Once you have a solid grasp on basic data structures (strings, lists, dictionaries, sets), object-oriented programming, and writing classes, it’s time to start building!

What you build is not as important as how you build it. The journey of building is truly what will teach you the most. You can only learn so much from reading Real Python articles and courses. Most of your learning will come from using Python to build something. The problems you will solve will teach you a lot.

There are many lists out there with ideas for beginner Python projects. Here are some ideas to get you started:

Number guessing game
Simple calculator app
Dice roll simulator
Bitcoin Price Notification Service
If you find it difficult to come up with Python practice projects to work on, watch this video. It lays out a strategy you can use to generate thousands of project ideas whenever you feel stuck.

Tip #11: Contribute to Open Source
In the open-source model, software source code is available publicly, and anyone can collaborate. There are many Python libraries that are open-source projects and take contributions. Additionally, many companies publish open-source projects. This means you can work with code written and produced by the engineers working in these companies.

Contributing to an open-source Python project is a great way to create extremely valuable learning experiences. Let’s say you decide to submit a bug fix request: you submit a “pull request” for your fix to be patched into the code.

Next, the project managers will review your work, providing comments and suggestions. This will enable you to learn best practices for Python programming, as well as practice communicating with other developers.

4
There is a lot of confusion these days about Artificial Intelligence (AI), Machine Learning (ML) and Deep Learning (DL). There certainly is a massive uptick of articles about AI being a competitive game changer and that enterprises should begin to seriously explore the opportunities. The distinction between AI, ML and DL are very clear to practitioners in these fields. AI is the all-encompassing umbrella that covers everything from Good Old Fashion AI (GOFAI) all the way to connectionist architectures like Deep Learning. ML is a sub-field of AI that covers anything that has to do with the study of learning algorithms by training with data. There are whole swaths (not swatches) of techniques that have been developed over the years like Linear Regression, K-means, Decision Trees, Random Forest, PCA, SVM and finally Artificial Neural Networks (ANN). Artificial Neural Networks is where the field of Deep Learning had its genesis from.

Some ML practitioners who have had previous exposure to Neural Networks (ANN), after all, it was invented in the early 60’s, would have the first impression that Deep Learning is nothing more than ANN with multiple layers. Furthermore, the success of DL is more due to the availability of more data and the availability of more powerful computational engines like Graphics Processing Units (GPU). This, of course, is true, the emergence of DL is essentially due to these two advances, however, the conclusion that DL is just a better algorithm than SVM or Decision Trees is akin to focusing only on the trees and not seeing the forest.

Anyway, despite being ignored, DL continues to be hype. The current DL hype tends to be that we have these commoditized machineries, that given enough data and enough training time, is able to learn on its own. This of course either an exaggeration of what the state-of-the-art is capable of or an oversimplification of the actual practice of DL. DL has over the past few years given rise to a massive collection of ideas and techniques that were previously either unknown or known to be untenable. At first, this collection of concepts seems to be fragmented and disparate. However, over time patterns and methodologies begin to emerge and we are frantically attempting to cover this space in “Design Patterns of Deep Learning“.


Deep Learning today goes beyond just multi-level perceptrons but instead is a collection of techniques and methods that are used to building composable differentiable architectures. These are extremely capable machine learning systems that we are only right now seeing just the tip of the iceberg. The key take away from this is that Deep Learning may look like alchemy today, but we eventually will learn to practice it like chemistry. That is, we would have a more solid foundation so as to be able to build our learning machines with greater predictability of its capabilities.


5
Artificial intelligence already powers many of our interactions today. When you ask Siri for directions, peruse Netflix’s recommendations, or get a fraud alert from your bank, these interactions are led by computer systems using large amounts of data to predict your needs.

The market is only going to grow. By 2020, research firm IDC predicts, AI will help drive worldwide revenues to over $47 billion, up from $8 billion in 2016.

Still, computer scientist and Coursera co-founder Andrew Ng says, fears that AI will replace humans are misplaced: “Despite all the hype and excitement about AI, it’s still extremely limited today relative to what human intelligence is.”

Ng, who is chief scientist at Baidu Research and teaches at Stanford, spoke to the Stanford Graduate School of Business community as part of a series presented by the Stanford MSx Program.

Here he discusses why AI gets a bad reputation, what reputation it actually deserves, and how we need to rethink our education system to prepare.

The New Electricity

"Just as electricity transformed almost everything 100 years ago, today I actually have a hard time thinking of an industry that I don’t think AI will transform in the next several years." - Andrew Ng

Electricity changed how the world operated. It upended transportation, manufacturing, agriculture, health care. AI is poised to have a similar impact, he says. Information technology, web search, and advertising are already being powered by artificial intelligence. It decides whether we’re approved for a bank loan. It helps us order a pizza and estimate our wait time, and even tells the driver where to deliver it. Other areas ripe for AI impact: fintech, logistics, health care, security, and transportation.

“Just as electricity transformed almost everything 100 years ago, today I actually have a hard time thinking of an industry that I don’t think AI will transform in the next several years,” Ng says.

Scarce Resources
What’s slowing down AI adoption? Two problems: scarcity of data and talent. For AI to be meaningful, companies need to feed their algorithms vast amounts of data, which isn’t always readily available. In fact, Ng says some large companies launch products for the payout of data, not revenue, and then later monetize it through a different product.

These companies are also engaging in a talent war for smart employees. “I would say the most scarce resource today is actually talent, because AI needs to be customized for your business context,” Ng says. “You can’t just download an open-source package and apply it to your problem.”

Evil AI
AI has an image problem, one deserved and one not. No, it will not someday control the human race. “I think that there is no clear path to how AI can become sentient,” he says. If it does, it might take hundreds or thousands of years. “Worrying about evil AI killer robots today is a little bit like worrying about overpopulation on the planet Mars.”

The real concern regarding AI is societal impact. Evil AI hype, he says, is being used to whitewash a much more serious issue, which is job displacement. “AI software will be in direct competition with a lot of people for jobs,” he says. That’s something Silicon Valley needs to own up to, he says.

Rethinking Education
Because of this job displacement, the U.S. would be wise to rethink its educational system. Automation in agriculture led the United States to overhaul its education system and develop the K-12 and university system we use today. Similarly, the U.S. must develop a way to reskill people whose jobs are taken by computer athe lgorithms.

“I think government should give people a safety net, but pay the unemployed to study, to provide the structure to help the unemployed study, so as to increase the odds of gaining skills needed to re-enter the workforce.”

Pages: [1]