forked from mikeckennedy/talk-python-transcripts
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path036_Python_IDEs_with_the_PyCharm_team.vtt
2375 lines (1583 loc) · 72.5 KB
/
036_Python_IDEs_with_the_PyCharm_team.vtt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
WEBVTT
00:00:00.001 --> 00:00:03.460
As a software developer, what's the most important application on your computer?
00:00:03.460 --> 00:00:09.600
If your answer is Microsoft Outlook, my heart goes out to you. Stay strong. But for most of us,
00:00:09.600 --> 00:00:14.860
it's probably a toss-up between our web browser and code editors. And for editors, there's basically
00:00:14.860 --> 00:00:20.940
two camps. There's the lightweight, smart text editors such as Vim, Emacs, and Sublime Text,
00:00:20.940 --> 00:00:26.920
and heavyweight but highly functional IDEs such as PyDev and PyCharm. This week, you'll meet
00:00:26.920 --> 00:00:32.180
Dmitry Trophimov, who's one of the main developers behind one of my favorite editors, PyCharm.
00:00:32.180 --> 00:00:38.320
This is episode number 36 of Talk Python to Me, recorded November 11, 2015.
00:00:53.840 --> 00:01:07.920
Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the
00:01:07.920 --> 00:01:12.540
ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter,
00:01:12.540 --> 00:01:17.460
where I'm @mkennedy. Keep up with the show and listen to past episodes at talkpython.fm,
00:01:17.580 --> 00:01:23.780
and follow the show on Twitter via at talkpython. This episode is brought to you by Hired and OpBeat.
00:01:23.780 --> 00:01:29.060
Thank them for supporting the show on Twitter via at Hired underscore HQ and at OpBeat.
00:01:29.060 --> 00:01:34.520
Hi, everyone. Thanks for listening to this episode. I have a few quick comments before we get to the
00:01:34.520 --> 00:01:40.080
interview. Some of the features we talk about are better understood visually rather than described
00:01:40.080 --> 00:01:44.940
in audio. And for that reason and others, I decided to write a blog post visually highlighting
00:01:44.940 --> 00:01:49.640
some of these concepts. This post is called Nine Reasons You Should Be Using PyCharm. If you're
00:01:49.640 --> 00:01:56.800
interested, check it out at bit.ly slash whypycharm. Last but not least, the PyCharm team at JetBrains
00:01:56.800 --> 00:02:02.080
offered to give away three annual subscriptions to PyCharm Professional. I'll do the drawing Monday,
00:02:02.080 --> 00:02:07.260
December 7th. That's a week from the release date of this podcast. All you have to do to be eligible is
00:02:07.260 --> 00:02:11.920
become a friend of the show. Visit talkpython.fm and click Friends of the Show in the navigation
00:02:11.920 --> 00:02:18.600
bar and sign up. Now let's get on to the show. Let me introduce Dmitry. Dmitry Tarfimov currently
00:02:18.600 --> 00:02:24.920
leads the development of PyCharm, a popular Python IDE by JetBrains. Dmitry is passionate about
00:02:24.920 --> 00:02:29.940
automation and software tooling. Before PyCharm, he implemented many different tools for a variety
00:02:29.940 --> 00:02:36.080
of companies, including a visual site scraper generator, a model to code mapper, and even a
00:02:36.080 --> 00:02:41.660
generator for hardware used in submarines. In his spare time, he's a committed running enthusiast
00:02:41.660 --> 00:02:47.200
and triathlete. Dmitry lives in Munich, Germany. Dmitry, welcome to the show.
00:02:47.200 --> 00:02:48.220
Hi, Mike.
00:02:48.220 --> 00:02:55.400
Hi. I'm really excited to talk about PyCharm and JetBrains and editors and tooling for Python
00:02:55.400 --> 00:02:56.580
with you today. It's going to be great.
00:02:56.580 --> 00:02:59.580
Yeah, sure. Thanks for inviting me.
00:03:00.020 --> 00:03:05.080
Yeah. So before we dig into all that, let's start at the beginning. How'd you get into
00:03:05.080 --> 00:03:06.960
programming in Python? What's your story?
00:03:06.960 --> 00:03:15.460
That was long ago, actually. My first programming experience was when I was something about seven
00:03:15.460 --> 00:03:22.500
years old. Back then, I had a ZX Spectrum computer and it was possible to program it with Sinclair
00:03:22.500 --> 00:03:30.580
BASIC. So I read a book about programming in BASIC and found some source program inside the book.
00:03:30.580 --> 00:03:37.220
And this program is supposed to do something cool. So I sit down and typed all the program into the
00:03:37.220 --> 00:03:43.120
computer, actually without full understanding how does it work. I was seven and I typed quite slow.
00:03:43.120 --> 00:03:48.540
So it took like, I don't know, like an hour or something to type that program in. And after I
00:03:48.540 --> 00:03:56.240
finished, I felt relief. But then when I tried to run it, it just failed. You know, so it didn't start.
00:03:56.240 --> 00:04:02.900
And I had no clue why. The error message was totally unclear for me. And it was very frustrating. Nobody
00:04:02.900 --> 00:04:09.560
could help me because I was at home alone. And I felt like I was betrayed by the book, which I trusted.
00:04:10.280 --> 00:04:18.760
So yeah, maybe if I have started to learn programming today with Python and PyCharm, for example, I would have
00:04:18.760 --> 00:04:25.220
much more pleasant experience. At least Python is a much, much better language. And PyCharm would hint
00:04:25.220 --> 00:04:31.900
me about which error I had and which is more important to where it was. So yeah, maybe. But my programming
00:04:31.900 --> 00:04:37.720
story didn't end there, obviously. Several years after I went into a computer class where I learned how to
00:04:37.720 --> 00:04:45.880
program Pascal, there was a brilliant teacher and Turbo Pascal IDE. And I learned step by step. And
00:04:45.880 --> 00:04:53.680
at some point, I realized that I can do computer programming in Pascal. Maybe that's why I'm a fan
00:04:53.680 --> 00:04:59.040
of IDEs because of Turbo Pascal. I don't know. Maybe that could be an imprint for me.
00:04:59.040 --> 00:05:02.660
Was it a young, impressionable programmer?
00:05:02.660 --> 00:05:07.460
Yeah. Awesome. So how'd you go from Pascal to Python?
00:05:07.460 --> 00:05:17.400
Actually, from Pascal, I converted to Java directly. So it was C and Assembler in the middle somewhere.
00:05:17.400 --> 00:05:27.980
And then I've been doing a lot of Java. And at some point, I realized that I need to have a scripting
00:05:27.980 --> 00:05:35.740
language in my toolbox. But I couldn't choose which one. And I wrote one small project in several
00:05:35.740 --> 00:05:42.940
languages just to be able to compare them. I took Groovy, Ruby, Python, and Perl. Perl was a total disaster.
00:05:42.940 --> 00:05:53.740
But others were more or less equal. But I remember my impression from Python. That felt pretty much like
00:05:53.740 --> 00:06:00.620
all other languages. But at the same time, very different from them. And everything felt
00:06:00.620 --> 00:06:09.660
reasonable and easy there. And I did like that. So since that, I used Python from time to time.
00:06:09.660 --> 00:06:20.380
And then I joined JetBrains to make a new IDE for Python called PyCharm. It was in early beta. And so I'm
00:06:20.380 --> 00:06:24.300
working on it till now. It was five and a half years ago.
00:06:24.300 --> 00:06:30.540
That's really excellent. And I've never heard people choosing a language the way you just described
00:06:30.540 --> 00:06:38.220
it. But it's such a good idea to say, look, I'm interested in learning this type of language. And it
00:06:38.220 --> 00:06:43.580
looks like there's these choices, four or five or six or whatever. And the idea of writing a simple
00:06:43.580 --> 00:06:49.900
program in each and then comparing the experience, that's really cool. I think more people should adopt that.
00:06:49.900 --> 00:06:55.180
Yeah, I gained a lot of experience doing that. And it was fun.
00:06:55.180 --> 00:07:01.980
Yeah, I always kind of just gone with, you know, do the research, see what's popular, what are the capabilities,
00:07:01.980 --> 00:07:08.460
what are the pluses and minuses, and then I'll just dive into one and just try to learn it. I never did sit down and like,
00:07:08.460 --> 00:07:15.260
do a bunch together and compare and contrast. That's cool. PyCharm. Before we get into PyCharm,
00:07:15.260 --> 00:07:20.380
maybe, you know, when I think about the company that makes PyCharm, JetBrains, where you work,
00:07:20.380 --> 00:07:28.780
I see you guys as one of the premier, if not the premier, developer tool companies out there.
00:07:29.420 --> 00:07:35.820
Can you maybe just talk a little bit about what is JetBrains, what type of apps and products you build?
00:07:35.820 --> 00:07:45.740
Yeah, sure. JetBrains is a company that makes tools for software developers, as you said. And
00:07:45.740 --> 00:07:51.580
currently, there are more than 500 people working there. And we have offices in St. Petersburg,
00:07:51.580 --> 00:08:00.460
Munich, Prague, and Boston. So the two biggest development spots are in St. Petersburg and Munich.
00:08:00.460 --> 00:08:08.060
And yeah, we make tools for software developers. And actually being ourselves software developers,
00:08:08.060 --> 00:08:14.780
this allows us to make really good tools. You know, there is a culture in JetBrains that everybody
00:08:15.420 --> 00:08:26.220
writes a code. Even our sales, they do program a lot, actually. So the company grows, but this is very,
00:08:26.220 --> 00:08:34.300
this is amazing that this culture stays. And talking about our products, of course, we have
00:08:34.300 --> 00:08:42.140
many ideas like PyCharm, IntelJ IDEA, RubyMine, PHPStorm, WebStorm, CLion, AppCode. So for
00:08:43.420 --> 00:08:53.180
basically for most major and popular languages, even if there is no IDE for a language, there should be a
00:08:53.180 --> 00:09:00.060
plugin that is maintained by JetBrains or third parties. So the IntelJ platform is quite, quite
00:09:00.060 --> 00:09:08.060
diverse and solid. Yeah, that's, that seems to be kind of the foundation of most of your IDEs. I kind of see
00:09:08.060 --> 00:09:16.060
you guys as the company that looks at what other software development systems are doing or build
00:09:16.060 --> 00:09:22.700
that and fixing the problems. Like, you know, Microsoft makes Visual Studio and it has, it's not bad, but it
00:09:22.700 --> 00:09:29.260
has these issues. And so you guys make ReSharper. Yeah, exactly. Exactly. And then, you know, Apple makes,
00:09:29.260 --> 00:09:32.060
Apple makes Xcode, but you're like, oh, this is not so great.
00:09:32.060 --> 00:09:34.060
Yeah.
00:09:34.060 --> 00:09:36.060
Yeah.
00:09:36.060 --> 00:09:38.060
Yeah.
00:09:38.060 --> 00:09:40.060
Yeah.
00:09:40.060 --> 00:09:40.060
Yeah.
00:09:40.060 --> 00:09:42.060
Yeah.
00:09:42.060 --> 00:09:50.060
Yeah.
00:09:50.060 --> 00:09:52.060
Yeah.
00:09:52.060 --> 00:09:52.060
Yeah.
00:09:52.060 --> 00:09:52.060
Yeah.
00:09:52.060 --> 00:10:02.060
Yeah.
00:10:02.060 --> 00:10:02.060
Yeah.
00:10:02.060 --> 00:10:02.060
Yeah.
00:10:02.060 --> 00:10:04.060
Yeah.
00:10:04.060 --> 00:10:04.060
Yeah.
00:10:04.060 --> 00:10:06.060
Yeah.
00:10:06.060 --> 00:10:12.880
If they're willing to have the time and energy and interest to actually learn the tools.
00:10:12.880 --> 00:10:14.800
Tools are very important.
00:10:14.800 --> 00:10:26.200
I wanted also to add that many people know about our ideas, but less people know that also we create other tools for software development.
00:10:26.200 --> 00:10:28.480
So we have a range of server-side tools.
00:10:28.480 --> 00:10:33.960
It is continuous integration called TeamCity.
00:10:33.960 --> 00:10:36.380
There is a bug tracker called Utrek.
00:10:36.380 --> 00:10:40.280
And there is a code review tool called AppSource.
00:10:40.280 --> 00:10:43.960
And we even make our own GVM programming language called Kotlin.
00:10:43.960 --> 00:10:50.320
So every area of software development, we try to make a product in this area.
00:10:50.320 --> 00:10:52.660
And actually, we use this product.
00:10:52.660 --> 00:10:55.200
And this allows us to make it good.
00:10:55.200 --> 00:10:58.960
Yeah, if you don't use the thing you're building, then you just...
00:10:58.960 --> 00:10:59.260
Yeah.
00:10:59.260 --> 00:11:01.160
It's just not good, right?
00:11:01.160 --> 00:11:04.260
You have to use the thing that you're building to make it truly excellent.
00:11:04.260 --> 00:11:05.140
Sure.
00:11:05.140 --> 00:11:06.300
Sure.
00:11:06.300 --> 00:11:06.880
All right.
00:11:06.880 --> 00:11:09.320
So like I said, I think most people know PyCharm.
00:11:09.320 --> 00:11:12.460
But maybe give us the 30-second elevator pitch.
00:11:12.460 --> 00:11:13.320
What is it?
00:11:13.320 --> 00:11:15.960
PyCharm is an IDE for Python.
00:11:15.960 --> 00:11:18.140
There are two editions of PyCharm.
00:11:18.440 --> 00:11:23.020
The first is PyCharm Community Edition that is free and open source.
00:11:23.020 --> 00:11:27.460
And it provides all basic functionality without any limitations.
00:11:27.460 --> 00:11:30.860
And there is a professional edition.
00:11:30.860 --> 00:11:38.380
It's not free, but it has many features, especially for professional development, like support for web technologies.
00:11:38.380 --> 00:11:48.920
There's many languages, like HTML, CSS, JavaScript, different JavaScript frameworks, Python web frameworks, like Django, Flask, Pyramid, Web2Py.
00:11:48.920 --> 00:11:59.520
And a lot of functionality, like working with databases and working with code on remote environments and profiling code coverage.
00:11:59.660 --> 00:12:03.400
So this is all in professional edition.
00:12:03.400 --> 00:12:04.200
Yeah.
00:12:04.200 --> 00:12:10.020
And you also have some cool database integration that I think we'll come back to in a little bit because it kind of blew my mind when I saw it.
00:12:10.020 --> 00:12:12.060
So I'm interested to ask you about it.
00:12:13.360 --> 00:12:18.560
One of the things that's cool about PyCharm, I think, is that it's really cross-platform.
00:12:18.560 --> 00:12:20.540
Yeah, that's true.
00:12:20.540 --> 00:12:25.720
PyCharm, as well as IntelliJ platform, is implemented in Java.
00:12:25.720 --> 00:12:30.180
So it basically runs everywhere where GVM can run.
00:12:30.180 --> 00:12:41.420
There are some parts that are native, but they are not essential for the main functionality, actually.
00:12:41.920 --> 00:12:46.460
And there are three operational systems that are officially supported.
00:12:46.460 --> 00:12:50.060
It is macOS X, Linux, and Windows.
00:12:50.060 --> 00:12:58.380
But actually, I know that our users even managed to run PyCharm on some environments like Raspberry Pi.
00:12:58.380 --> 00:13:07.200
And, you know, it's funny because we have issues in our tracker that sound like it's great that I could run PyCharm on Raspberry Pi.
00:13:07.200 --> 00:13:09.320
But unfortunately, embedded terminal is not working.
00:13:10.220 --> 00:13:11.220
So, yeah.
00:13:11.220 --> 00:13:16.060
So in that case, we just answer, okay, sorry for that.
00:13:16.060 --> 00:13:19.120
But embedded terminal is also open source.
00:13:19.120 --> 00:13:24.200
So you can port it to Raspberry Pi, send us a pull request, and something like that.
00:13:24.200 --> 00:13:26.340
Yeah, that's really funny.
00:13:27.600 --> 00:13:30.780
The fact that it runs on Raspberry Pi at all is pretty awesome.
00:13:30.780 --> 00:13:33.180
People are saying, oh, this part doesn't work.
00:13:33.180 --> 00:13:35.580
It's like, did you really expect it all to work?
00:13:35.580 --> 00:13:37.420
But yeah, that's cool.
00:13:37.420 --> 00:13:37.880
That's cool.
00:13:37.880 --> 00:13:45.260
I've seen somewhere, I think I even sent it on Twitter not too long ago, somebody had it running inside of a Docker container.
00:13:45.260 --> 00:13:46.260
Yeah, that's crazy.
00:13:46.260 --> 00:13:46.580
That's crazy.
00:13:46.580 --> 00:13:47.500
That's crazy.
00:13:47.500 --> 00:13:52.240
We just added support for Docker in the latest version.
00:13:52.240 --> 00:13:57.260
And so it was also a response like, oh, that's great.
00:13:57.260 --> 00:14:03.220
But what I want is to run PyCharm in Docker and then run containers from PyCharm.
00:14:04.820 --> 00:14:06.460
Yeah, it was, it's very nice.
00:14:06.460 --> 00:14:12.300
Actually, I don't understand this scenario yet, but I think I will try it myself.
00:14:12.300 --> 00:14:16.700
Yeah, it's probably just because you can, right?
00:14:16.700 --> 00:14:22.720
But when you guys announced support for Docker, that's like, you can create Docker containers that run your apps,
00:14:22.720 --> 00:14:25.720
not you can run PyCharm within Docker containers.
00:14:25.720 --> 00:14:28.560
But, you know, I guess someone got that working, which is cool.
00:14:28.560 --> 00:14:29.280
Yeah.
00:14:29.280 --> 00:14:32.860
So you said there's like 500 people at JetBrains.
00:14:32.860 --> 00:14:33.480
Yeah.
00:14:34.380 --> 00:14:38.100
Yeah, how many people are actually part of the PyCharm initiative?
00:14:38.100 --> 00:14:43.600
There are 14 people working directly on PyCharm.
00:14:43.600 --> 00:14:46.920
PyCharm is built upon Intel J Platform.
00:14:46.920 --> 00:14:57.940
So if we count those people, so it adds like from 50 to 60 people more that are contributing directly to Platform.
00:14:58.200 --> 00:15:04.840
But actually, that is not very easy to count because there are a lot of people who work on different IDs.
00:15:04.840 --> 00:15:07.580
For example, WebStorm.
00:15:07.580 --> 00:15:12.000
All functionality of WebStorm comes with PyCharm Professional Edition.
00:15:12.000 --> 00:15:14.920
So do we count as an Intel J Platform or not?
00:15:14.920 --> 00:15:17.100
So that's difficult to measure.
00:15:18.420 --> 00:15:23.480
Yeah, there's a lot of intersection between the different IDE teams like AppCode and WebStorm.
00:15:23.480 --> 00:15:25.740
So, yeah, I can see that that's tricky.
00:15:25.740 --> 00:15:26.180
Okay.
00:15:26.180 --> 00:15:31.480
So it's a pretty large team, full-time team working on PyCharm, yeah?
00:15:31.480 --> 00:15:32.300
Yeah.
00:15:32.300 --> 00:15:32.700
Yeah.
00:15:32.700 --> 00:15:44.520
By the way, we're proud that we have a proportion of girls and guys like 50-50 almost in our team.
00:15:45.120 --> 00:15:46.880
That is really excellent.
00:15:46.880 --> 00:15:48.240
Cheers to you guys.
00:15:48.240 --> 00:15:48.720
That's great.
00:15:48.720 --> 00:15:54.220
So when I run PyCharm, you know, as Sid, it's built on Intel J.
00:15:54.220 --> 00:16:03.480
Like how much of the thing that is running that I'm working with is PyCharm and how much of that is just Intel J with like a little understanding layer back into Python?
00:16:05.260 --> 00:16:10.340
Actually, all the Intel J Platform is built that way that it is a language agnostic.
00:16:10.340 --> 00:16:16.160
So it's like a framework upon which you can write a parser and inspections.
00:16:16.160 --> 00:16:24.220
But there is actually no that strict separation.
00:16:25.100 --> 00:16:29.740
When you're getting started, there's different ways to get started in Python, right?
00:16:29.740 --> 00:16:36.980
One way is to just type Python in your terminal or command prompt and then start entering stuff into the REPL.
00:16:36.980 --> 00:16:41.620
That's probably the least productive thing you can do, although it's the easiest to get started, right?
00:16:41.660 --> 00:16:46.900
Like you can create variables and import modules and things like that, right?
00:16:46.900 --> 00:16:58.120
And then as you go up, you know, there's stuff like editors like Vim and Emacs and Sublime Text where, you know, they're really nice editors,
00:16:58.120 --> 00:17:05.500
but they don't necessarily help you understand the standard library and things like that necessarily.
00:17:05.500 --> 00:17:09.680
And then you've got PyCharm, which can help you with the language.
00:17:09.680 --> 00:17:12.780
Where do you think people should start?
00:17:12.780 --> 00:17:13.940
What are your thoughts?
00:17:13.940 --> 00:17:19.200
Is there a lot of value in starting sort of with no support?
00:17:19.200 --> 00:17:27.340
Or do you think it's more helpful to have like a really helpful environment, even if you don't necessarily learn some of the details right away?
00:17:27.340 --> 00:17:33.460
I think that the supportive environment is beneficial, actually.
00:17:33.460 --> 00:17:38.920
It even can help you to learn the language and it assists you.
00:17:38.920 --> 00:17:44.420
So I would prefer to start with an IDE.
00:17:44.420 --> 00:17:48.600
You know, we're both sort of self-selecting in that sense as well.
00:17:48.600 --> 00:17:58.680
But I kind of agree with you that, you know, it's great to memorize the API for things like requests or the string library.
00:17:58.680 --> 00:18:11.020
But, you know, if I can just hit dot and type T and it shows me all the other options that maybe I'll have on strings, you know, that's really helpful, right?
00:18:11.380 --> 00:18:12.520
As a new person.
00:18:12.520 --> 00:18:13.020
Yeah, sure.
00:18:13.020 --> 00:18:15.420
And you do memorize them, actually.
00:18:15.420 --> 00:18:24.480
Because it just takes less time when you see it in code completion, not in Google, for example, or documentation.
00:18:24.480 --> 00:18:28.820
So you get information faster and you do memorize it.
00:18:29.620 --> 00:18:33.040
There's some cool plugins that I want to come back to later to talk about that as well.
00:18:33.040 --> 00:18:39.440
But another thing that's really challenging can be creating new types of projects.
00:18:39.440 --> 00:18:50.980
So if I want a new Flask website based on Bootstrap or I want a Pyramid website based on the starter template or something like that.
00:18:51.520 --> 00:18:58.960
Can you talk about, like, sort of what the types of projects you can create in PyCharm as, like, starter projects?
00:18:58.960 --> 00:19:00.340
Yeah, sure.
00:19:00.340 --> 00:19:05.200
It's mostly all type of Python web framework.
00:19:05.200 --> 00:19:16.700
So it is Django, Flask, Pyramid, Web2Py, and also all kinds of pure web projects.
00:19:17.920 --> 00:19:21.440
Actually, the main project that you can create in PyCharm is pure Python projects.
00:19:21.440 --> 00:19:25.060
So you can just start with that, for example, and then you can add everything that you want.
00:19:25.060 --> 00:19:31.600
If you know that you are going to develop Django projects, then it's better to start with Django projects from the start.
00:19:31.600 --> 00:19:35.020
Because everything will be configured and you will have a template.
00:19:35.020 --> 00:19:43.980
Yeah, I think one of the things that people struggle with, and as you get experience, you forget that it's actually really hard.
00:19:43.980 --> 00:19:46.620
You're just like, oh, that's a little bit of extra work.
00:19:46.920 --> 00:19:49.300
But in the beginning, it can be really hard.
00:19:49.300 --> 00:19:51.760
So, you know, suppose I want to get started with Pyramid.
00:19:51.760 --> 00:19:53.000
Right?
00:19:53.000 --> 00:20:04.660
Well, to get started with Pyramid, I can't just, like, create a file and start typing, you know, create my WSGI app and here's my handler configurations and so on.
00:20:04.660 --> 00:20:09.460
I have to pip install Pyramid and the various dependencies.
00:20:10.360 --> 00:20:21.260
And then I've got to know to use, like, pcreate, the thing that will generate the template starter code or, of course, write it from scratch, which is a lot of work.
00:20:21.260 --> 00:20:24.560
And that will generate a whole bunch of stuff, a whole project structure.
00:20:24.560 --> 00:20:30.960
And then I've got to run, you know, the setup configuration stuff because it's all treated like packages and so on.
00:20:31.400 --> 00:20:38.160
And I think people that are experienced with Python sort of forget how non-obvious that part is, right?
00:20:38.160 --> 00:20:42.480
But having it just as a thing you click, I'd like a new Pyramid app, and all that stuff happens.
00:20:42.480 --> 00:20:44.320
You know, that's really cool.
00:20:44.640 --> 00:20:56.080
I think that's one of the things that's nice about, like, creating new projects with PyCharm is a lot of that configuration stuff and dependency stuff is handled all in one shot.
00:21:07.000 --> 00:21:09.660
This episode is brought to you by Hired.
00:21:09.660 --> 00:21:16.120
Hired is a two-sided, curated marketplace that connects the world's knowledge workers to the best opportunities.
00:21:16.120 --> 00:21:25.280
Each offer you receive has salary and equity presented right up front, and you can view the offers to accept or reject them before you even talk to the company.
00:21:25.280 --> 00:21:31.640
Typically, candidates receive five or more offers in just the first week, and there are no obligations ever.
00:21:31.640 --> 00:21:33.740
Sounds pretty awesome, doesn't it?
00:21:33.740 --> 00:21:35.840
Well, did I mention there's a signing bonus?
00:21:36.440 --> 00:21:39.900
Everyone who accepts a job from Hired gets a $2,000 signing bonus.
00:21:39.900 --> 00:21:44.240
And as Talk Python listeners, it gets way sweeter.
00:21:44.240 --> 00:21:51.800
Use the link Hired.com slash Talk Python To Me, and Hired will double the signing bonus to $4,000.
00:21:51.800 --> 00:21:53.500
Opportunity's knocking.
00:21:53.500 --> 00:21:57.120
Visit Hired.com slash Talk Python To Me and answer the call.
00:22:05.880 --> 00:22:06.340
True.
00:22:06.340 --> 00:22:06.740
True.
00:22:06.740 --> 00:22:07.140
True.
00:22:07.140 --> 00:22:07.300
True.
00:22:07.300 --> 00:22:07.300
True.
00:22:07.300 --> 00:22:07.380
True.
00:22:07.380 --> 00:22:07.460
True.
00:22:07.460 --> 00:22:11.640
But also, you can start, you're going to go step-by-step with PyCharm.
00:22:11.640 --> 00:22:21.400
So you can just create pure Python project, or you can just open a directory and create file there, and then start typing something.
00:22:21.680 --> 00:22:28.900
And when you have a user's name, PyCharm will offer you to install this package from PyPI, so you can do that.
00:22:28.900 --> 00:22:39.060
And it's not that strict that if you develop a pyramid, you need to start from a pyramid project and generate everything.
00:22:39.060 --> 00:22:39.800
Right.
00:22:39.800 --> 00:22:40.220
That's true.
00:22:40.380 --> 00:22:46.220
So it's possible that it's helpful for you, but if you already have a pyramid website, you can just grab the directory.
00:22:46.220 --> 00:22:46.740
Yeah, yeah.
00:22:46.740 --> 00:22:47.020
Sure.
00:22:47.020 --> 00:22:50.720
Throw it on PyCharm, then it'll sort of be as if you had created it, right?
00:22:50.720 --> 00:22:50.900
Yeah.
00:22:50.900 --> 00:22:59.860
PyCharm will understand the structure of your project so that it is actually a pyramid project and will configure pretty much of everything.
00:23:00.840 --> 00:23:08.460
I don't really want to necessarily just go through all the features of PyCharm, but maybe you could talk about a couple favorites.
00:23:08.460 --> 00:23:17.300
Like, for example, I think my two favorite features in PyCharm are the sort of smart IntelliSense, right?
00:23:17.300 --> 00:23:25.920
So I get code completion across all the files in my project, as well as all the packages that I've installed in my environment and the standard library and so on.
00:23:25.920 --> 00:23:27.840
So that sort of IntelliSense is really cool.
00:23:28.300 --> 00:23:32.460
And then the sort of navigation stuff, right?
00:23:32.460 --> 00:23:35.560
So I can say, oh, here's the function being called on some object.
00:23:35.560 --> 00:23:37.480
Take me to its implementation.
00:23:37.480 --> 00:23:38.980
What are your favorites?
00:23:38.980 --> 00:23:48.140
Actually, I also like IntelliSense and navigation, but my favorite is definitely the debugger.
00:23:48.140 --> 00:23:58.280
I don't know, maybe since those days when I wrote Pascal and Turbo Pascal at DEI, I always like the ability to dive into a running program and see what is actually happening there.
00:23:58.280 --> 00:23:58.340
Yeah.
00:23:58.340 --> 00:24:12.920
So, and I'm proud that PyCharm has a very solid debugger and we even have some almost unique features like debugging of sub-processes and debugging of applications on remote environments.
00:24:13.320 --> 00:24:16.160
I like this part most.
00:24:16.160 --> 00:24:24.240
Actually, we have quite good version control support, JIT support, for example.
00:24:25.240 --> 00:24:26.720
So it's not bad.
00:24:26.720 --> 00:24:31.560
I would even say amazing, but it could be considered a bit immodest for a JIT brain person.
00:24:31.560 --> 00:24:33.400
But yes, I like our JIT integration.
00:24:33.400 --> 00:24:39.480
And my favorite feature there is ability to compare different branches in JIT log.
00:24:39.480 --> 00:24:40.100
Okay.
00:24:40.100 --> 00:24:40.940
Yeah, that's pretty awesome.
00:24:40.940 --> 00:24:41.840
Local history.
00:24:41.840 --> 00:24:42.280
I'm sorry.
00:24:42.280 --> 00:24:45.400
So for interrupting, local history is amazing also.
00:24:45.580 --> 00:24:50.360
Yeah, I was definitely going to say, if you're talking about version control, this idea of local history is cool.
00:24:50.360 --> 00:24:55.140
Let's take a step back for a minute and dig into the other ones just for a moment.
00:24:55.140 --> 00:24:57.780
And then I want to talk about local history because that's really awesome.
00:24:57.780 --> 00:25:02.900
So how do you guys do IntelliSense for Python?
00:25:02.900 --> 00:25:06.400
Like how does that work in a dynamic language?
00:25:07.480 --> 00:25:08.560
How does it work?
00:25:08.560 --> 00:25:16.720
IntelliSense in PyCharm works that way that when you write your code in PyCharm, it's parsed in real time.
00:25:16.720 --> 00:25:25.640
And analyzed this way that PyCharm tries to understand what is your goal and how to help you the best way.
00:25:25.640 --> 00:25:29.440
So it offers you code completion.
00:25:29.440 --> 00:25:32.300
It reformats your code.
00:25:32.300 --> 00:25:36.300
It inserts correct indentation, for example.
00:25:36.800 --> 00:25:41.700
So it highlights, of course it highlights syntax errors.
00:25:41.700 --> 00:25:49.440
But beyond that, it also tries to warn you about some errors that are not so obvious.
00:25:49.440 --> 00:26:03.020
So if, for example, you reuse a variable that you iterate through in a cycle or if value could be undefined, how is it implemented?
00:26:04.080 --> 00:26:10.760
Well, more what I'm thinking is, you know, when I write Python code, I don't ever declare a type.
00:26:10.760 --> 00:26:13.500
I don't say, you know, int x equals 7.
00:26:13.500 --> 00:26:15.620
I just say x equals 7.
00:26:15.620 --> 00:26:20.040
And, you know, sometimes it's really obvious, right, when you declare it just like that.
00:26:20.040 --> 00:26:29.080
But sometimes, you know, there's a long chain of events that leads to data being passed from one stage to another, to another, to another, to another, to finally being assigned to a variable.
00:26:29.080 --> 00:26:32.900
And it seems like you guys do a really good job of actually knowing what that's supposed to be.
00:26:32.900 --> 00:26:37.200
Yeah, we try to infer types for variables.
00:26:38.100 --> 00:26:40.920
And we do it quite, quite good.
00:26:40.920 --> 00:26:44.340
So it's called data flow analysis.
00:26:45.080 --> 00:26:53.840
When you write your code inside a function or a method, we trace the types of all the variables.
00:26:53.840 --> 00:26:57.400
Yeah, I think that's really awesome.
00:26:57.400 --> 00:27:07.440
And I think that's one of the benefits over things like Sublime Text, where if it sees you use some function or property of something that looks like an object above,
00:27:07.680 --> 00:27:15.000
it'll sort of then suggest it later as IntelliSense, but it doesn't really understand, like, the way the whole program fits together.
00:27:15.000 --> 00:27:18.100
It's missing a lot of the cool stuff that you guys have there.
00:27:18.100 --> 00:27:22.040
I know you just announced support for Python 3.5.
00:27:22.040 --> 00:27:22.660
True.
00:27:22.660 --> 00:27:27.240
And that includes this thing called Python Type Hints.
00:27:27.980 --> 00:27:37.740
Yeah, actually, PyCharm team participated, was involved, actually, in the process of elaboration of this proposal.
00:27:37.740 --> 00:27:40.040
That's really cool.
00:27:40.040 --> 00:27:44.460
Maybe before I ask you a question about it, maybe you could tell everyone what those are.
00:27:45.360 --> 00:27:56.320
There is a PEP 484, so-called, this is initiative adding a declaration of typing into Python.
00:27:56.320 --> 00:28:02.400
So before there was no standard way to annotate types.
00:28:02.400 --> 00:28:11.480
It was something starting from Python 3, but it was very limited and couldn't be used extensive.
00:28:11.980 --> 00:28:26.880
In Python 3.5, Gubito Warren Rossum came up with a proposal of elaboration of standard notation for annotating types for arguments and variables.
00:28:26.880 --> 00:28:33.280
Yeah, so maybe an example would be I've got a function, sayHello, right?