<p>I certainly appreciate your level of enthusiasm to want to dig straight into the code, but if I were you I'd start with the <a href="https://bitcoin.org/en/developer-guide" rel="nofollow noreferrer">Developer Guide on bitcoin.org</a>, and perhaps also the <a href="https://bitcoin.org/en/developer-reference" rel="nofollow noreferrer">Developer Reference</a>. A whole lot of effort has gone into this documentation (especially thanks to <a href="https://bitcoin.stackexchange.com/users/21052/david-a-harding">this guy</a>), and I think you'd be remiss to not to take advantage of it.</p>

<p>After digesting some of that content, you'll have a better idea of what particular aspect of Bitcoin Core interests you the most. As I'm sure you've noticed, it's a rather large codebase, covering consensus issues, blockchain/storage/pruning issues, elliptic curve cryptography, DOS issues, Bitcoin scripting issues, Bloom filters, wallet issues, UI issues, and tons of other things I can't begin to fathom. After getting a good technical overview of Bitcoin and posing a more specific question, I'm sure someone (perhaps not me) can give you a more specific staring point.</p>

CC BY-SA 3.0
2015-05-03T19:38:05.900Z
2015-05-03T19:38:05.900Z
2017-04-13T12:47:34.187Z
Christopher Gurnee
<p>I've found <a href="http://www.python.org" rel="nofollow">Python</a> to be the best Bitcoin learning tool, and many agree, namely because:</p>

<ol>
<li>You can use the Python console without compiling code, allowing you to easily play with it until it makes sense</li>
<li>Python (especially version 2.7) is dynamically typed (bytes, strings, ints do not need declaring) <em>See <a href="https://bitcoin.stackexchange.com/users/25088/christopher-gurnee">Christopher Gurnee's</a> comment below</em></li>
<li>There's some fantastic libraries for Python, namely <a href="https://github.com/richardkiss/pycoin" rel="nofollow">Pycoin</a> and <a href="https://github.com/vbuterin/pybitcointools" rel="nofollow">pybitcointools</a></li>
</ol>

CC BY-SA 3.0
2015-05-04T13:14:17.700Z
I agree that Python is a great learning tool for Bitcoin, however saying that Python isn't strongly typed is inaccurate. Strong typing refers to the fact that values and objects have a specific type, and require explicit casts/conversions when converting between dissimilar types, e.g. this expression is invalid: `"1" + 2`, `TypeError: cannot concatenate 'str' and 'int' objects`. Strong/weak typing isn't related to whether or not variables are explicitly typed; you're probably thinking of static vs. dynamic typing (and Python *is* dynamically typed). It's also often called "duck" typed.
Christopher Gurnee
CC BY-SA 3.0
2015-05-04T14:08:52.787Z
`you're probably thinking of static vs. dynamic typing`: You're right mate, I misspoke there! I've edited accordingly, thanks
Wizard Of Ozzie
CC BY-SA 3.0
2015-05-04T02:47:19.973Z
2015-05-04T14:10:32.667Z
2015-05-04T14:10:32.667Z
Wizard Of Ozzie
<p>Even I'm quite new to Bitcoin and I started out with <a href="http://www.michaelnielsen.org/ddi/how-the-bitcoin-protocol-actually-works/" rel="nofollow">this</a>.</p>

<p>This short explanation gave me good overview.</p>

<p>And Christopher Gurnee is right with starting to study the Developer Guide, the Developer Reference and in addition you could take a look at the <a href="https://bitcoin.org/en/developer-examples" rel="nofollow">Developer Examples</a>.</p>

<p>Regarding your interest in coding, you should take a look at the <code>bitcoin-0.10.X/qa/</code> directory - here you find (also python) code for quality assurance tests.</p>

CC BY-SA 3.0
2015-05-03T22:21:57.003Z
2015-05-03T22:21:57.003Z
Aliakbar Ahmadi
<p>In the bitcoin/src, which files are the "main" files I should start with if I want to learn how Bitcoin works? In other words, where's it good to branch off from?</p>

<p>I'm new to C++, but can code okay in PHP and Python. I'm learning C++ along the way.</p>

<bitcoin-core-development>
Which files do you recommend I start with to learn Bitcoin?
inersha
# Which files do you recommend I start with to learn Bitcoin?

(Asked by: username_0 on 2015-05-03)

In the bitcoin/src, which files are the "main" files I should start with if I want to learn how Bitcoin works? In other words, where's it good to branch off from?

I'm new to C++, but can code okay in PHP and Python. I'm learning C++ along the way.

**Tags:** bitcoin-core-development


---

## 3 answers

### Answer by username_1 on 2015-05-03. Score: 3

I certainly appreciate your level of enthusiasm to want to dig straight into the code, but if I were you I'd start with the [Developer Guide on bitcoin.org](https://bitcoin.org/en/developer-guide), and perhaps also the [Developer Reference](https://bitcoin.org/en/developer-reference). A whole lot of effort has gone into this documentation (especially thanks to [this guy](https://bitcoin.stackexchange.com/users/21052/david-a-harding)), and I think you'd be remiss to not to take advantage of it.

After digesting some of that content, you'll have a better idea of what particular aspect of Bitcoin Core interests you the most. As I'm sure you've noticed, it's a rather large codebase, covering consensus issues, blockchain/storage/pruning issues, elliptic curve cryptography, DOS issues, Bitcoin scripting issues, Bloom filters, wallet issues, UI issues, and tons of other things I can't begin to fathom. After getting a good technical overview of Bitcoin and posing a more specific question, I'm sure someone (perhaps not me) can give you a more specific staring point.


---

### Answer by username_2 on 2015-05-04. Score: 2

I've found [Python](http://www.python.org) to be the best Bitcoin learning tool, and many agree, namely because:

1. You can use the Python console without compiling code, allowing you to easily play with it until it makes sense
2. Python (especially version 2.7) is dynamically typed (bytes, strings, ints do not need declaring) *See [username_1 username_1's](https://bitcoin.stackexchange.com/users/25088/username_1) comment below*
3. There's some fantastic libraries for Python, namely [Pycoin](https://github.com/richardkiss/pycoin) and [pybitcointools](https://github.com/vbuterin/pybitcointools)

> **Comments:**
> **username_1**: I agree that Python is a great learning tool for Bitcoin, however saying that Python isn't strongly typed is inaccurate. Strong typing refers to the fact that values and objects have a specific type, and require explicit casts/conversions when converting between dissimilar types, e.g. this expression is invalid: `"1" + 2`, `TypeError: cannot concatenate 'str' and 'int' objects`. Strong/weak typing isn't related to whether or not variables are explicitly typed; you're probably thinking of static vs. dynamic typing (and Python *is* dynamically typed). It's also often called "duck" typed.  
> **username_2**: `you're probably thinking of static vs. dynamic typing`: You're right mate, I misspoke there! I've edited accordingly, thanks  

---

### Answer by username_3 on 2015-05-03. Score: 1

Even I'm quite new to Bitcoin and I started out with [this](http://www.michaelnielsen.org/ddi/how-the-bitcoin-protocol-actually-works/).

This short explanation gave me good overview.

And username_1 username_1 is right with starting to study the Developer Guide, the Developer Reference and in addition you could take a look at the [Developer Examples](https://bitcoin.org/en/developer-examples).

Regarding your interest in coding, you should take a look at the `bitcoin-0.10.X/qa/` directory - here you find (also python) code for quality assurance tests.


---

